我认为是一个相对简单的 jQuery 插件有问题......
该插件应通过 ajax 从 php 脚本中获取数据以将选项添加到<select>. ajax 请求非常通用:
<select>
$.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 中,REQUEST_TYPE服务器上的始终是 ‘OPTIONS’,并且 $_POST 数据不会出现。Apache 将请求记录为“选项”类型:
REQUEST_TYPE
::1 - - [08/Jul/2009:11:43:27 -0500] "OPTIONS sitecodes.php HTTP/1.1" 200 46
为什么这个 ajax 调用可以在 Safari 中工作,但不能在 Firefox 中工作,我该如何为 Firefox 修复它?
响应标头 日期:格林威治标准时间 2009 年 7 月 8 日星期三 21:22:17 服务器:Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2 X-Powered-By: PHP/5.2.6 内容长度 46 保活超时=15,最大值=100 连接保活 内容类型 text/html 请求标头 主机订购单:8888 用户代理 Mozilla/5.0(Macintosh;U;Intel Mac OS X 10.5;en-US;rv:1.9.1) Gecko/20090624 Firefox/3.5 接受 text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language en-us,en;q=0.5 接受编码 gzip,deflate 接受字符集 ISO-8859-1,utf-8;q=0.7,*;q=0.7 保活300 连接保持活动 来源 http://ux.inetu.act.org 访问控制请求方法 POST Access-Control-Request-Headers x-requested-with
这是 Firebug 输出的图片:
错误的原因是同源策略。它只允许您对自己的域执行 XMLHTTPRequests。看看是否可以改用JSONP回调:
$.getJSON( 'http://<url>/api.php?callback=?', function ( data ) { alert ( data ); } );