这是我的情况: 我创建了一个小部件,网站管理员可以嵌入他们的网站,数据存储在我的服务器中。所以脚本基本上必须对我服务器中的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请求到另一台远程服务器可能会被拒绝?你能帮我清楚吗? 感谢..
答案 0 :(得分:2)
不允许直接跨域请求。但是,有一种常用的技术称为JSONP,它允许您通过使用脚本标记来避免此限制。基本上,您使用已知名称创建回调函数:
function receiveData(data) {
// ...
}
然后您的服务器在函数调用中包装JSON数据,如下所示:
receiveData({"the": "data"});
您可以通过向网页添加script
标记来“呼叫”跨域服务器。 jQuery在ajax
函数中优雅地包含了所有这些。
我必须使用的另一种技术是通过iframe进行跨文档通信。您可以通过postMessage以受限制的方式让一个窗口与另一个窗口(甚至是跨域)进行对话。请注意,只有最近的浏览器具有此功能,因此在不诉诸hackery的情况下,该选项在所有情况下都不可行。
答案 1 :(得分:0)