我认为jQuery插件有问题..。
插件应该通过ajax从php脚本中获取数据,以将选项添加到<select>
.这个Ajax请求是通用的:
$.ajax({
url: o.url,
type: 'post',
contentType: "application/x-www-form-urlencoded",
data: '{"method":"getStates", "program":"EXPLORE"}',
success: function (data, status) {
console.log("Success!!");
console.log(data);
console.log(status);
},
error: function (xhr, desc, err) {
console.log(xhr);
console.log("Desc: " + desc + "\nErr:" + err);
}
});
这在Safari中没问题,不过在Firefox 3.5中服务端的请求类型总是 OPTIONS ,而且 $_POST 数据也没有。Apache将请求记录为“OPTIONS”类型:
::1 - - [08/Jul/2009:11:43:27 -0500] "OPTIONS sitecodes.php HTTP/1.1" 200 46
为什么这个Ajax调用能在Safari中工作,而在Firefox中却不能工作,我如何去修复它?
Response Headers
Date: Wed, 08 Jul 2009 21:22:17 GMT
Server:Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2
X-Powered-By: PHP/5.2.6
Content-Length 46
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Content-Type text/html
Request Headers
Host orderform:8888
User-Agent Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Origin http://ux.inetu.act.org
Access-Control-Request-Method POST
Access-Control-Request-Headers x-requested-with
下面是Firebug输出的图片:
发布于 2018-01-27 02:09:50
产生错误的原因是同源策略,它只允许自己的域执行XMLHTTPRequest。看看能否使用JSONP回调:
$.getJSON( 'http://<url>/api.php?callback=?', function ( data ) { alert ( data ); } );
发布于 2018-01-27 03:20:10
我在Django端使用了以下代码来解释选项请求并设置所需的访问控制头。在此之后,我来自Firefox的跨域请求开始工作。如前所述,浏览器首先发送OPTIONS请求,然后立即发送POST/GET
def send_data(request):
if request.method == "OPTIONS":
response = HttpResponse()
response['Access-Control-Allow-Origin'] = '*'
response['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
response['Access-Control-Max-Age'] = 1000
# note that '*' is not valid for Access-Control-Allow-Headers
response['Access-Control-Allow-Headers'] = 'origin, x-csrftoken, content-type, accept'
return response
if request.method == "POST":
# ...
编辑:至少在某些情况下,您还需要向实际响应中添加相同的访问控制头。这可能有点混乱,因为请求似乎成功了,但是Firefox没有将响应的内容传递给Javascript。
发布于 2018-01-27 04:52:03
Mozilla开发者中心文章描述各种跨域请求方案。文章指出,内容类型为“application/x-www-form-urlencode”的POST请求应该作为“简单请求”simple request“(没有“preflight”OPTIONS请求)。然而,我发现Firefox发送了OPTIONS请求,尽管我的帖子是以POST发送的。
我在服务器上创建了一个选项请求处理程序,将“Access-Control-Allow-Origin”响应头设置为“*‘.通过将其设置为特定的东西,可以限制得更多,比如’http://omeurl.com 你可以指定一个以逗号分隔的多个来源的列表,但我无法让它起作用。
一旦Firefox接收到具有可接受的“Access-Control-Allow-Origin”值的选项请求响应,它就会发送POST请求。
https://stackoverflow.com/questions/-100007249
复制相似问题