Я разрабатываю простое приложение для входа в панель, взаимодействуя с БД Mysql.
В моем приложении создайте HTTP-клиент для входа или регистрации новых пользователей.
В index.js
я поставил код входа в систему, в newuser.js
Я поставил код о регистрации.
Я создал HTTP-клиент для регистрации новых пользователей, в newuser.js
createReq = Titanium.Network.createHTTPClient();createReq.onload = function() {
Titanium.API.info("Start onload");
var jsonReg = this.responseText;
var resultReg = JSON.parse(jsonReg);
Titanium.API.info("Start IF");
if (resultReg.registered == false) {
alert('utente esistente');
$.view_indicator.hide();
Titanium.API.info("user NOT registered");
} else if(resultReg.registered == true) {
alert('utente NON esistente');
$.view_indicator.hide();
Titanium.API.info("user registered");
}
}function createUser () {
if ( $.user.value != '' && $.pass.value != '' && $.pass_check.value != '' && $.name.value != '' && $.email.value != '' ) {
if ($.pass.value != $.pass_check.value) {
alert("Le password non coincidono.")
} else {
if (!check_email($.email.value)) {
alert("Inserisci una email valida");
} else {
createReq.open("POST", "http://solimeo.sviluppofacile.it/register.php");
var params = {
username: $.user.value,
password: Ti.Utils.md5HexDigest($.pass.value),
name: $.name.value,
email: $.email.value
};
$.view_indicator.show();
createReq.send(params);
};
$.user.blur();
$.pass.blur();
$.pass_check.blur();
$.name.blur();
$.email.blur();
};
} else {
alert("Tutti i campi sono obbligatori!");
};
}
Данные JSON в этом случае пришли с этой страницы PHP, register.php
<?php
include ('connection.php');
$username = $_POST['username'];
$password = $_POST['password'];
$name = $_POST['name'];
$email = $_POST['email'];
$sql = "SELECT username,email FROM users WHERE username = '" . $username . "' OR email = '" . $email . "'";
$query = mysql_query($sql);
if (mysql_num_rows($query) > 0) {
$response = array('registered' => false, 'message' => 'Utente che esiste');
echo json_encode($response);
} else {
$insert = "INSERT INTO users (username,password,name,email) VALUES ('" . $username . "','" . $password . "','" . $name . "','" . $email . "')";
$query = mysql_query($insert);
if ($query) {
//echo "Utente correttamente registrato! Puoi ora loggarti.";
$response = array('registered' => true, 'message' => 'Utente correttamente registrato! Puoi ora loggarti.');
echo json_encode($response);
} else {
//echo "Registrazione fallita";
$response = array('registered' => false, 'message' => 'Registrazione fallita.');
echo json_encode($response);
}
}
mysql_close($connect) or die (mysql_error());
?>
Но если я пытаюсь зарегистрировать пользователя, который существует, у меня появляется эта ошибка
[ERROR] : V8Exception: Exception occurred at undefined:1: Uncaught SyntaxError: Unexpected token
[ERROR] : XMLModule: (KrollRuntimeThread) [46894,49752] Error parsing XML
[ERROR] : XMLModule: org.xml.sax.SAXParseException: Unexpected token (position:TEXT {"registered":fa...@2:1 in java.io.InputStreamReader@429a8648)
[ERROR] : XMLModule: at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146)
[ERROR] : XMLModule: at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107)
[ERROR] : XMLModule: at ti.modules.titanium.xml.XMLModule.parse(XMLModule.java:82)
[ERROR] : XMLModule: at ti.modules.titanium.xml.XMLModule.parse(XMLModule.java:68)
[ERROR] : XMLModule: at ti.modules.titanium.network.TiHTTPClient.getResponseXML(TiHTTPClient.java:700)
[ERROR] : XMLModule: at ti.modules.titanium.network.HTTPClientProxy.getResponseXML(HTTPClientProxy.java:107)
[ERROR] : XMLModule: at org.appcelerator.kroll.runtime.v8.V8Object.nativeCallProperty(Native Method)
[ERROR] : XMLModule: at org.appcelerator.kroll.runtime.v8.V8Object.callProperty(V8Object.java:73)
[ERROR] : XMLModule: at org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:1121)
[ERROR] : XMLModule: at android.os.Handler.dispatchMessage(Handler.java:98)
[ERROR] : XMLModule: at android.os.Looper.loop(Looper.java:146)
[ERROR] : XMLModule: at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:112)
[ERROR] : TiHttpClient: (KrollRuntimeThread) [1,49753] Error parsing XML
[ERROR] : TiHttpClient: org.xml.sax.SAXParseException: Unexpected token (position:TEXT {"registered":fa...@2:1 in java.io.InputStreamReader@429a8648)
[ERROR] : TiHttpClient: at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146)
[ERROR] : TiHttpClient: at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107)
[ERROR] : TiHttpClient: at ti.modules.titanium.xml.XMLModule.parse(XMLModule.java:82)
[ERROR] : TiHttpClient: at ti.modules.titanium.xml.XMLModule.parse(XMLModule.java:68)
[ERROR] : TiHttpClient: at ti.modules.titanium.network.TiHTTPClient.getResponseXML(TiHTTPClient.java:700)
[ERROR] : TiHttpClient: at ti.modules.titanium.network.HTTPClientProxy.getResponseXML(HTTPClientProxy.java:107)
[ERROR] : TiHttpClient: at org.appcelerator.kroll.runtime.v8.V8Object.nativeCallProperty(Native Method)
[ERROR] : TiHttpClient: at org.appcelerator.kroll.runtime.v8.V8Object.callProperty(V8Object.java:73)
[ERROR] : TiHttpClient: at org.appcelerator.kroll.KrollProxy.handleMessage(KrollProxy.java:1121)
[ERROR] : TiHttpClient: at android.os.Handler.dispatchMessage(Handler.java:98)
[ERROR] : TiHttpClient: at android.os.Looper.loop(Looper.java:146)
[ERROR] : TiHttpClient: at org.appcelerator.kroll.KrollRuntime$KrollRuntimeThread.run(KrollRuntime.java:112)
Проблема в начале onload
метод: ошибка возвращается после Titanium.API.info("Start onload");
Кажется, это проблема со структурой JSON, но я попытался ее проверить, и это нормально.
В index.js
Я использовал тот же режим входа в систему, и у меня нет проблем.
РЕДАКТИРОВАТЬ: я убрал вопрос …
Найди отличие:
1) Вы отправляете JSON
echo json_encode($response);
2) Код ожидает XML:
[ERROR] : V8Exception: Exception occurred at undefined:1: Uncaught SyntaxError: Unexpected token
[ERROR] : XMLModule: (KrollRuntimeThread) [46894,49752] Error parsing XML
^^^
а также
[ERROR] : XMLModule: org.xml.sax.SAXParseException: Unexpected token (position:TEXT {"regi
^^^^^^^---xml parser
trying to handle JSON ---^^^^^^
Я решил проблему.
Это не проблема кода, который ожидает XML: вывод, который он вводит в заблуждение.
Первое сообщение говорит
[ERROR] : V8Exception: Exception occurred at undefined:1: Uncaught SyntaxError: Unexpected token
где после «токена» есть пробел !!!
Если я печатаю в консоли все символы строки, переданные this.responseText
я могу видеть два пробела: один в начале и один в конце.
Первый пробел вызывает ошибку при разборе. Второе пространство не имеет значения, потому что оно в конце.
Это очень странно, потому что в других JS, index.js
где я использовал тот же самый iter, строка передана this.responseText
не имеет пробела в начале, но имеет два пробела в конце. Однако пробелы в конце не имеют значения, поэтому в этом случае у меня не было проблем с вызовом.
Так что с Циклом я беру индекс {
в моей строке, а затем я использовал строку без пробелов в начале.
createReq.onload = function() {
var response = this.responseText;
var i;
for ( i=0; i < this.responseText.length; i++) {
if (this.responseText[i] == "{")
break;
};
response = response.slice(i,response.length);
resultReg = JSON.parse(response);
if (resultReg.registered==false) {
// the rest of code
// .....
Я выбрал это решение, потому что кажется, что пробелы вставлены случайно.
Вероятно, есть некоторые проблемы с управлением ответом с HTTPClient. Я думаю, что я свяжусь также с Appcelerator.
Во всяком случае, теперь все в порядке.