javascript — Titanium — синтаксический анализ ошибок PHP + JSON

Я разрабатываю простое приложение для входа в панель, взаимодействуя с БД 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

Решение

Найди отличие:

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  ---^^^^^^
0

Другие решения

Я решил проблему.

Это не проблема кода, который ожидает 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.

Во всяком случае, теперь все в порядке.

0

По вопросам рекламы [email protected]