JQuery JSON призывает к PHP WebService всегда запускает обратный вызов «Ошибка»

Сейчас у меня эта головная боль, так как у меня была эта проблема целый день и, тем не менее, не могу ее исправить. Я смотрел на Google и StackOverflow в течение нескольких часов, пробовал много методов (включая переход с JSON на JSONP, проверку заголовков на PHP, тесты localhost), спросил друзей и т. Д., И я все еще застрял. Может быть, это всего лишь деталь, я не знаю.

Я работаю над мобильным приложением Android, и для этого у меня есть веб-сервис PHP на хостинге (скажем, example.com), который работает нормально, так как я тестировал его с помощью клиента PHP WS JSON. Проблема в том, что я вызываю этот WS сейчас из JS-файла на моем компьютере, используя jQuery, JSON и Ajax, и получаю следующий ответ от консоли отладчика Google Chrome:

  • readyState: 4
  • statusText: "OK"
  • responseText: (что мне нужно, никаких ошибок)

Но в ответ от сервера я всегда получаю обратный вызов Error, никогда не успех . Я читал это потому, что сервер не смог правильно разобрать JSON, но я действительно не знаю.

Я оставляю вам свой код.

От CLIENT.JS:

$.ajax({ type: "POST", crossDomain: true, contentType: "application/json utf-8", dataType: "json", url: "http://www.example.com/ws/webservice.php/" + methodName, data: JSON.stringify(window.parameterArray), success: function (response) { alert('Success!'); window.resultVar = "Success! " + response; console.log(response); }, error: function (response) { alert('Error'); window.resultVar = "Error: " + response; console.log(response); } }); 

От SERVER.PHP:

 <?php header('Access-Control-Allow-Origin: *'); //I have also tried the * wildcard and get the same response header("Access-Control-Allow-Credentials: true"); header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS'); header('Access-Control-Max-Age: 1000'); header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description'); header('Content-type: application/json; charset=utf-8'); require_once "mobilefuncts.php"; $methodName = str_replace($_SERVER["SCRIPT_NAME"]."/", "", $_SERVER["REQUEST_URI"]); if (isset($methodName)) { $param = (array)json_decode($HTTP_RAW_POST_DATA); $access = new MobileAccess(); //From mobilefuncts.php $result = call_user_func_array(array($access,$methodName), $param); //Calls the method echo json_encode($result); } ?> 

Кто-нибудь знает, что можно сделать? Возможно, как я уже говорил, проблема – это всего лишь деталь. Я не знаю, действительно, я новичок в таких вещах.

Спасибо в forehand!

ОБНОВИТЬ:

Я просто понял, что консоль Chrome сообщает мне следующее:

 GET http://localhost:81/.../cordova_plugins.json 404 (Not Found) 

Может ли это быть причиной проблемы?

ОБНОВЛЕНИЕ 2:

Послушай, у меня есть ключ. Я добавил дополнительные параметры функции ошибки и получил себе этот результат:

(Изменение ошибки происходит от функции (ответа) до функции (jqXHR, textStatus, errorThrown) )

 jqXHR.responseText: [an array with the info I'm asking] errorThrown: "SyntaxError: Unexpected token" 

потому что вы выполняете перекрестные вызовы домена, вам нужно использовать JSONP. PHP-сервер должен сформировать ответ, который выглядит так: callback (jsonSyntax);

+ Изменить

 contentType: "application/json utf-8", 

в

 contentType: "application/json; charset=utf-8", 

contentType вашего заголовка contentType приводит к тому, что ваш сервер неправильно интерпретирует содержимое вашего запроса POST .

Попробуйте изменить URL-адрес JQuery:

 http://www.example.com/ws/webservice.php/methodName 

Для того, чтобы:

 http://www.example.com/ws/webservice.php?method=methodName 

И затем попробуйте прочитать его из $ _GET ['method'] из PHP, я думаю, что это должна быть ваша проблема

Просто измените свой ответ на текст, а затем проанализируйте текст как JSON, например:

var json = JSON.parse (данные);