我正在通过POST请求跨域发送数据,但是响应不起作用,特别是,从未调用过jQuery的成功处理程序。
正在使用的资料:Django,Apache,jQuery。
因此,我建立了一个与此类似的请求:
$.ajax({
url: "http://somesite.com/someplace",
type: "POST",
cache: false,
dataType: "json",
data: { ... },
success: function( msg ) {
alert(msg);
},
});
如您所知,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
相反,如果我设置一个complete: function()...
处理html" target="_blank">程序,它将起作用。
因此,问题是:正在发生(或没有发生),为什么?我得到的数据很好,我只想能够返回响应。
更新 : 这解决了我在一些浏览器上的问题,但是由于我对这种行为没有完整的明确的解释,所以我将它保持开放 。
好的,所以我阅读了手册,并且据我所知,所应用的算法大致如下:
OPTIONS
要求。其思想是,他们发出此请求,从而为他们提供有关所请求资源的答案,然后应将其缓存。 我没有回传一个max-age 字段,所以我怀疑在返回成功并允许X请求的同时,用户代理的缓存中没有允许我执行的操作,因此默认规则(隔离请求) )。POST
似乎允许Firefox和Google Chrome查看响应。歌剧不能。IE目前仍未经测试。我目前尚不了解,并且从手册中(至少对我而言)不清楚,CORS请求是否还应在请求中使用这些标头以及OPTIONS
。我将试验Max- Age
标题,看看允许或不允许的内容。但是,我仍然对此问题缺乏明确的权威性理解,因此,如果有人在这里知道,我会很高兴。
好的,所以我相信正确的做法是这样的:
if request.method == "POST":
response = HttpResponse(simplejson.dumps(data),mimetype='application/json')
response['Access-Control-Allow-Origin'] = "*"
return response
elif request.method == "OPTIONS":
response = HttpResponse("")
response['Access-Control-Allow-Origin'] = "*"
response['Access-Control-Allow-Methods'] = "POST, OPTIONS"
response['Access-Control-Allow-Headers'] = "X-Requested-With"
response['Access-Control-Max-Age'] = "1800"
else:
return HttpResponseBadRequest()
这是基于我根据预检请求从Mozilla挖掘而来的文档。
所以,我相信会发生的是:
OPTIONS
其X-Requested-With
设置为发送,XMLHttpRequest
我相信这是必要的,以允许Javascript和Origin
标头访问任何内容。X-Requested-With
东西”。我是说OPTIONS
并且POST
被允许,并且此响应应该被缓存30分钟。Allow-Methods
,Allow-Headers
但是根据上面链接的文档中的交流,这不是必需的。这很有意义,访问检查已经完成。Allow-Origin
字段的有效性,例如POST
。如果通过,则客户端可以访问数据,否则,请求已经完成,但浏览器拒绝实际的客户端应用程序(Javascript)访问该数据。我认为这是对正在发生的事情的正确总结,无论如何它似乎都起作用。如果我不对,请大喊。
问题内容: 我正在编写一个HTML5应用程序,该应用程序使用JSONP从几个不同的来源收集数据。我对GET所做的任何事情都可以正常工作。我现在正尝试发布数据,并且遇到了一个有趣的问题。我需要将数据从我的应用程序发布到另一个应用程序,该应用程序从本地计算机运行。我正在尝试编写具有跨平台功能的移动应用程序(请考虑使用Pulse / Flipboard),因此该代码将始终从本地源运行。我的思考过程如下:
跨域资源共享 (CORS) 跨域资源共享(Cross-Origin Resource Sharing)允许WEB端的应用程序访问不属于本域的资源 配置格式 CORS配置为json字符串,类似 { "rules":[ { "id":"id1" "AllowOrigin":"http://*.example.com" //指定允许发送跨源请求的源,支持使用通配符
问题内容: 我对跨域JavaScript的概念有疑问。 有一个服务器(ex amazon.com),在其中只有选定的域可以使用其Web服务。所以可以肯定,如果我尝试从本地使用他们的服务,我将无法。我在控制台上得到了这个 跨域请求被阻止:“同源起源”策略禁止读取http://football20.myfantasyleague.com/2014/export?TYPE=rosters&L=52761
我有两个ruby on rails应用程序,分别位于两个不同的域上(例如和)
本文向大家介绍js跨域资源共享 基础篇,包括了js跨域资源共享 基础篇的使用技巧和注意事项,需要的朋友参考一下 本文详细介绍了javascript跨域资源共享,供大家参考,具体内容如下 1.为什么提出跨域资源共享(CORS)? 因为XHR实现ajax的安全限制是:XHR 对象只能访问与包含它的页面位于同一个域中的资源 2.如何实现跨域?(跨浏览器) 以上就是本文的全部内容,希望对大家的学习
我目前正在从事一个托管在域上的laravel项目。此应用程序的一部分(某些功能)必须位于不同的域上。我在我的网上找到了一条路。在php中,我用以下命令映射了所有路由: 以及需要以相同方式位于另一个域上,但具有不同域的路由。好啊在主域中,我创建了一个具有src属性的图像: 指向此方法路线: 它起作用了。我在不同的域上共享同一个会话,但是,我想问你们,对于这个案例场景,你们是否知道更好的方法。我知道这