这让我很困惑。我正在发送一个跨域请求,我知道某些正在通过并成功返回,但成功函数不会被触发。我没有看到任何警报......
jQuery.getJSON('http://xxxx.appspot.com?callback=?', function(json) {
//console.log(json);
alert ('text');
});
我有几个迹象表明请求是成功的:
但在任何情况下我都没有在成功函数中获得警报
在几个页面上尝试使用不同版本的jQuery。
更新:所以我启用了标题,但结果仍然完全相同。警报没有解雇。
这是回复的标题:
HTTP/1.1 200 OK
Content-Type: application/json; charset=ISO-8859-1
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin,SOAPserver,SOAPaction,Method,Accept,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type
Content-Encoding: gzip
Vary: Accept-Encoding
Date: Mon, 12 Nov 2012 12:30:02 GMT
Server: Google Frontend
Cache-Control: private
Content-Length: 36
答案 0 :(得分:1)
正如您清楚地看到这是一个跨域请求,我想您至少知道一点the same origin policy?
简而言之,如果您未在appspot.com
服务器上设置the appropriate CORS headers,则浏览器没有理由允许脚本分析结果。好消息是几乎所有服务器端语言it's very easy to add the relevant headers。当然,这意味着您可以更改服务器(或浏览器作为服务器看到的内容,它可能是代理服务器)。
编辑:
我刚刚注意到您调用的网址中的callback=?
。这意味着您在JSONP中调用服务,而不是JSON(跨域问题的过时解决方案)。由于它不能与回调语法一起使用,并且响应头包含application/json
,您可能会尝试查看它是否处理普通json。请尝试在网址末尾没有?callback=?
。
答案 1 :(得分:0)
当谈到CORS(跨源资源共享)时,它都是关于标题的。
您的请求标题和答案标题是正确的,或者它不起作用非常重要。
如果您的请求标头不正确,请求将被服务器无情地杀死。 如果答案标题不正确,浏览器客户端将忽略答案。
在答案中,您应找到以下标题子集:
请求所使用的所有来源,方法和标题必须在服务器答案中允许,否则将被忽略。
例如:
Access-Control-Allow-Origin *;
Access-Control-Allow-Credentials true;
Access-Control-Allow-Methods GET, POST, OPTIONS, PUT, DELETE;
Access-Control-Allow-Headers Origin,SOAPserver,SOAPaction,Method,Accept,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type;
没有更多的信息,我就不能更有用了:)
答案 2 :(得分:0)
同时添加
Access-Control-Max-Age: 3600
另外,请检查浏览器请求中的Access-Control-Request-Method
。