我编写了一个运行良好的XMLHttpRequest,但返回一个空的responseText.
javascript如下:
var anUrl = "http://api.xxx.com/rates/csv/rates.txt"; var myRequest = new XMLHttpRequest(); callAjax(anUrl); function callAjax(url) { myRequest.open("GET", url, true); myRequest.onreadystatechange = responseAjax; myRequest.setRequestHeader("Cache-Control", "no-cache"); myRequest.send(null); } function responseAjax() { if(myRequest.readyState == 4) { if(myRequest.status == 200) { result = myRequest.responseText; alert(result); alert("we made it"); } else { alert( " An error has occurred: " + myRequest.statusText); } } }
代码运行正常.我可以走过去,我得到readyState == 4和状态== 200但是responseText总是空白.
我收到错误调度的日志错误(在Safari调试中):getProperties,我似乎无法找到引用.
我在本地和远程服务器上运行Safari和Firefox中的代码.
放入浏览器时的URL将返回字符串并提供状态代码200.
我在Mac Widget中向相同的URL写了类似的代码,运行正常但是浏览器中的相同代码永远不会返回结果.
是http://api.xxx.com/
您网域的一部分吗?如果没有,您将被同一原始政策阻止.
您可能需要查看以下Stack Overflow帖子以获取一些可能的解决方法:
如何规避同源政策
问题已解决
在我的情况下,问题是我在url param中使用完整路径执行ajax调用(使用jQuery中的$ .ajax,$ .get或$ .getJSON方法):
网址:" http://mydomain.com/site/cgi-bin/serverApp.php "
但正确的方法是将url的值传递为:
url:"site/cgi-bin/serverApp.php"
有些浏览器不会发生冲突,也不会在一个文本或另一个文本之间产生干扰,但在Firefox 3.6 for Mac OS中,将这条完整路径称为" 跨站点脚本 "......另一方面,在同一浏览器中有以下区别:
http://mydomain.com/site/index.html
并把
http://www.mydomain.com/site/index.html
实际上它是正确的点视图,但大多数实现没有区别,因此解决方案是删除所有指定执行ajax请求的方法中脚本的完整路径的文本和 ....删除任何BASE标记在index.html文件中
base href ="http://mydomain.com/"<---坏主意,删除它!
如果您不删除它,此系统的此版本浏览器可能会收到您的ajax请求,就好像它是一个跨站点请求!
我有同样的问题,但只在Mac OS机器上.问题是Firefox将ajax响应视为"跨站点"调用,在任何其他机器/浏览器中它都能正常工作.我没有找到任何帮助(我认为这是一个firefox实现问题),但我将在服务器端证明下一个代码:
header('Content-type: application/json');确保浏览器将数据作为"json数据"获取...
浏览器阻止您进行跨站点脚本编写。
如果该网址不在您的域中,那么您需要在服务器端执行此操作或将其移到您的域中。