跨域javascript ajax请求 - 状态200正常但没有响应

时间:2011-08-11 23:05:24

标签: ajax

这是我的情况: 我创建了一个小部件,网站管理员可以嵌入他们的网站,数据存储在我的服务器中。所以脚本基本上必须对我服务器中的php文件发出ajax请求来更新数据库。对?对 :) 当我在本地服务器中运行时,ajax请求效果很好,但当php文件在我的 ONLINE上时,无效 服务器。 这是我使用的代码:

var url = "http://www.mydomain.net/ajax_php.php";
var params = "com=ins&id=1&mail=mymail@site.net";
http.async = true;
http.open("POST", url, true);       

http.onreadystatechange = function() {

    if(http.readyState == 4 && http.status == 200) {

    //do my things here
    alert( http.responseText ); 

    }
}
http.send(params);

在萤火虫中显示:http://www.mydomain.net/ajax_php.php 200 OK X 600ms。

当我检查ajax responnseText时,我总是得到一个状态:0

现在我的问题是:“我可以默认执行跨域ajax请求吗?这可能是跨域ajax问题吗?因为当请求的文件驻留在我的本地服务器中但是在请求的时候不能工作时它会起作用文件是在另一台服务器,我认为ajax请求到另一台远程服务器可能会被拒绝?你能帮我清楚吗? 感谢..

2 个答案:

答案 0 :(得分:2)

不允许直接跨域请求。但是,有一种常用的技术称为JSONP,它允许您通过使用脚本标记来避免此限制。基本上,您使用已知名称创建回调函数:

function receiveData(data) {
    // ...
}

然后您的服务器在函数调用中包装JSON数据,如下所示:

receiveData({"the": "data"});

您可以通过向网页添加script标记来“呼叫”跨域服务器。 jQuery在ajax函数中优雅地包含了所有这些。

我必须使用的另一种技术是通过iframe进行跨文档通信。您可以通过postMessage以受限制的方式让一个窗口与另一个窗口(甚至是跨域)进行对话。请注意,只有最近的浏览器具有此功能,因此在不诉诸hackery的情况下,该选项在所有情况下都不可行。

答案 1 :(得分:0)

您需要通过JSONP电话将回复发送给您的客户。

您需要做的是将您的数据请求包含在脚本标记中。您的服务器将使用函数调用中包含的数据进行响应。通过将脚本作为外部资源下载,您的浏览器将执行脚本(就像添加对外部JS文件(如jQuery)的引用)并将数据传递给已知的JS方法。然后,您的JS方法将获取数据并执行您需要执行的任何操作。

涉及很多步骤。使用像jQuery这样的库可以为此提供很多支持。

希望这有帮助。