![](/img/trans.png)
[英]jquery (mobile) ajax - always calls error callback function? what is wrong
[英]JQuery JSON Calls To PHP WebService Always Runs “Error” Callback
我现在很头疼,因为我整天都遇到这个问题,但仍然无法解决。 我已经在Google和StackOverflow上看了几个小时,尝试了许多方法(包括从JSON更改为JSONP,检查PHP的标头,本地主机测试),询问了朋友等等,但我仍然陷入困境。 也许这只是一个细节,我不知道。
我正在开发一个Android移动应用程序,为此,我在托管服务器(例如example.com)上有一个PHP Web服务,自从我使用PHP WS JSON客户端进行了测试以来,它就可以正常运行。 问题是我现在使用jQuery,JSON和Ajax从计算机上的JS文件中调用此WS,并且从Google Chrome的调试器控制台收到以下响应:
但是在服务器的响应中, 我总是收到Error回调,而从未收到Success 。 我读这是因为服务器无法正确解析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);
}
?>
有谁知道该怎么办? 就像我之前说的,问题可能只是一个细节。 我真的不知道,我对这种事情有点陌生。
正手感谢!
更新:
我刚刚意识到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"
更改
contentType: "application/json utf-8",
至
contentType: "application/json; charset=utf-8",
contentType
标头的contentType
错误导致服务器错误地解释POST
请求的内容。
尝试从更改JQuery URL:
http://www.example.com/ws/webservice.php/methodName
至:
http://www.example.com/ws/webservice.php?method=methodName
然后尝试从PHP的$ _GET ['method']中读取它,我认为这应该是您的问题
只需将您的响应更改为文本,然后将文本解析为JSON,例如:
var json = JSON.parse(data);
因为您正在进行跨域调用,所以需要使用JSONP。 PHP服务器必须形成如下所示的响应:callback(jsonSyntax);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.