更新 IV / 当前状态:我现在通过另一个问题确认文件的字符编码很好,而不是问题的原因。我还针对另一台服务器进行了测试,但错误仍然存在。但是,它确实适用于本地主机。 总结一下: JSONP 调用适用于 localhost,但是当针对外部域运行时,来自服务器的响应是空的(没有标头/没有 http 响应代码)。复制请求的 URL 并将其直接插入浏览器时,输出正确且格式正确(utf-8 / json)。
小提琴:http: //jsfiddle.net/5SJvp/1/
更新三:我现在可以让它在 localhost 上成功运行。但是,对我的生产域使用完全相同的代码(客户端和服务器)仍然失败。服务器的响应是“空的”,意思是说它没有返回 http 状态码。
更新二:经过更多调试后,我注意到响应不包含 http 状态代码。这可能是我的问题的原因?我认为这意味着服务器端出了点问题,但我一辈子都看不到在哪里。
更新 I:从 jQuery 中截取请求的位置似乎停止了。
// Do send the request
// This may raise an exception which is actually
// handled in jQuery.ajax (so no try/catch here)
xhr.send( ( s.hasContent && s.data ) || null );
参数(来自 Firebug)
_ 1356655864905
callback jQuery18308375673194150332_1356655863817
p 0522
pl 12
s false
secret ##############################
u request12341299
请求(来自 Firebug)
Accept text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language nb-no,nb;q=0.9,no-no;q=0.8,no;q=0.6,nn-no;q=0.5,nn;q=0.4,en-us;q=0.3,en;q=0.1
Connection keep-alive
Host localhost:8888
Referer http://localhost:8888/popup.html
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0
X-Requested-With XMLHttpRequest
原始问题:
我正在努力解决似乎是一个常见问题,但我还没有找到解决方案。我正在尝试使用 jQuery 执行一个非常简单的 jsonp 调用。问题是要么a)什么都没有发生,要么b)来自服务器的响应是空的。
我尝试了几种不同的方法,同时使用了 $.ajax 方法和 $.getJSON 方法。两者都产生相同的错误结果。使用下面的代码没有任何反应:使用 Chrome 调试器,我可以看到它只是在该方法中途停止执行。但是使用 Wireshark 我可以看到客户端执行了三向握手,因此准备发送数据,但它没有做到这一点。
如果我删除回调=?它确实执行了,但是响应格式错误(或者至少,我认为是这样,因为我只能在 Firebug 中看到标有红线的响应)。
$.ajax({
url: "http://mydomain.com/asd.php", //"http://localhost:8888/index.php",
dataType: 'jsonp',
type: 'GET',
data: {p:p, u:u, s:symbols, pl:pl, secret:secret},
contentType: "application/json; charset=utf-8",
async: false,
success: function(data){
console.log("What " + data.test);
},
error: function(data){
console.log("failed for some reason");
}
});
服务器代码($callback = $_GET["callback"]
<?php header('content-type: application/json; charset=utf-8');
.
.
.
$data = array
(
"message" => $message,
"status" => $statuscode,
"length" => strlen($message)
);
echo $callback . '('.json_encode($data) .')';
exit;
?>
这是手动输入的服务器响应。
funcName({"message":"!0b7(cb6Gv40","status":"OK","length":12})