清空XMLHttpRequest中的responseText

我写了一个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总是空白。

我得到一个日志错误(在Safaridebugging)的错误调度:getProperties,我似乎无法find参考。

我已经在本地和远程服务器上运行Safari和Firefox中的代码。

放入浏览器时的URL将返回string,并给出200的状态代码。

我写了一个类似的代码到Mac Widget中运行正常的同一个URL,但是浏览器中的代码永远不会返回结果。

http://api.xxx.com/您的域的一部分? 如果没有,您将被相同的原产地政策阻止。

您可能需要查看以下堆栈溢出文章,了解几种可能的解决方法:

  • 如何规避同源政策

问题解决

在我的情况下,问题是我在URL参数中使用完整path进行ajax调用(使用jQuery中的$ .ajax,$ .get或$ .getJSON方法):

url:“ http://mydomain.com/site/cgi-bin/serverApp.php

但正确的方法是传递url的值为:

url:“site / cgi-bin / serverApp.php”

有些浏览器不会发生冲突,不会在文本或其他文本之间产生任何影响,但是在Firefox 3.6 for Mac OS中,将此完整path称为“ 跨站点脚本 ”…另一件事是,在同一个浏览器中,

http://mydomain.com/site/index.html

并放

http://www.mydomain.com/site/index.html

事实上,这是正确的观点,但大多数实现没有区别,所以解决scheme是删除所有的文本,指定的脚本的完整path在执行ajax请求的方法 ….删除任何BASE标记在index.html文件中

基地href =“http://mydomain.com/”<—坏主意,删除它!;

如果你不删除它,这个系统的浏览器版本可能会采取你的Ajax请求,如果这是一个跨站请求!

我有同样的问题,但只在Mac OS机器上。 问题在于Firefox将ajax响应视为“跨站点”调用,在任何其他机器/浏览器中都能正常工作。 我没有find任何帮助(我认为这是一个Firefox的实现问题),但我要certificate在服务器端的下一个代码:

 header('Content-type: application/json'); 

确保浏览器获取数据为“json数据”…

浏览器阻止你跨站脚本。

如果url不在您的网域中,那么您需要在服务器端执行此操作,或将其移至您的网域。

这可能不是最好的办法。 但它以某种方式为我工作,所以我要去运行它。

在我的php函数返回数据,在返回行之前的一行,我添加了一个echo语句,回显我想要发送的数据。

现在确定它为什么有效,但它确实。

有类似的问题,你的。 我们所要做的就是使用这里find的document.domain解决scheme:

如何规避同源政策

我们也需要改变Web服务的一面。 使用在这里find的“Access-Control-Allow-Origin”标题:

https://developer.mozilla.org/En/HTTP_access_control