我通过POST请求发送数据跨域但响应不起作用,具体来说,jQuery的成功处理程序永远不会被调用.
正在使用的东西:Django,Apache,jQuery.
所以,我设置了一个与此类似的请求:
$.ajax({
url: "http://somesite.com/someplace",
type: "POST",
cache: false,
dataType: "json",
data: { ... },
success: function( msg ) {
alert(msg);
},
});
Run Code Online (Sandbox Code Playgroud)
众所周知,CORS允许我OPTIONS适当地回答查询,说"是的,你可以发帖给我".我在做什么 Firebug确认我正在获取我的200状态代码并且返回类型实际上是application/json.但是,Firebug还确认上面的成功处理程序没有被调用.
作为参考,我的回答OPTIONS是:
elif request.method == "OPTIONS":
response = HttpResponse("")
response['Access-Control-Allow-Origin'] = "*"
response['Access-Control-Allow-Methods'] = "POST, GET, OPTIONS"
response['Access-Control-Allow-Headers'] = "X-Requested-With"
return response
Run Code Online (Sandbox Code Playgroud)
相反,如果我设置了一个complete: function()...处理程序,它就可以了.
所以,问题是:发生了什么(或不发生)以及为什么?我收到的数据很好,我只想回复一下.
更新:这解决了我在某些浏览器上的问题,但由于我对此行为没有完全明确的解释,我将其保持打开状态.
好的,所以我阅读了手册以及我对它的理解,所应用的算法大致如下:
OPTIONS请求.他们的想法是,他们提出这个请求,让他们得到一个关于所请求资源的答案,然后他们应该缓存这些资源.我没有传回一个max-age字段,所以我怀疑在返回成功并且X-request允许的情况下,用户代理的缓存中没有任何内容允许我创建它,因此默认规则(隔离请求) )应用.POST似乎允许Firefox和Google …我有一个Play 2.0.1应用程序,我想使用托管在其他域上的Javascript调用.我的Javascript调用失败了:
Origin http://mydomain.com is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
我已经找到了一些如何在Play 1中设置正确的HTTP标头的例子,但是没有为Play 2.0.1找到任何东西.在阅读文档(http://www.playframework.org/documentation/2.0.2/JavaResponse)之后,我尝试了以下方法以使工作正常:
public static Result myJsonWebService() {
...
response().setHeader("Access-Control-Allow-Origin", "*");
return ok(toJson(jsonObject));
}
Run Code Online (Sandbox Code Playgroud)
但我的JS Web服务调用仍然失败.
为了让这个工作,我需要做什么?