当我使用此代码发出AJAX请求时,它返回状态为0.我做错了什么?此外,此代码仅用于因各种原因在Firefox中运行。
var ajax;
function connectToOtherServer(server,port,userid,password){
ajax=new XMLHttpRequest();
ajax.onreadystatechange=validateConnection;
params='userid='+encodeURIComponent(userid)+'&password='+encodeURIComponent(password);
alert('http://'+server+':'+port+'/ok.txt');
ajax.open('POST','http://'+server+':'+port+'/ok.txt',true);
ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
ajax.setRequestHeader("Content-length",params.length);
ajax.setRequestHeader("Connection","close");
ajax.send(params);
}
function validateConnection(){
if(ajax.readyState===4){
if(ajax.status===200){
alert(ajax.responseText);
}else{
alert(ajax.status);
}
}
}
答案 0 :(得分:3)
如果您尝试连接到其他服务器,same origin policy将阻止您:
术语“起源”是使用 域名,应用层 协议,以及(在大多数浏览器中)TCP 运行该文件的HTML文件的端口 脚本。考虑两种资源 当且仅限于同一来源 如果所有这些值都是正确的 相同。
答案 1 :(得分:1)
jquery.com如果您使用JSONP和回调,则只能连接到其他服务器。另一台服务器需要支持JSONP /回调机制。此方法涉及创建新的脚本标记,然后让远程服务器将回调代码返回到此脚本标记中。查看jQuery源代码(或只是使用它),看它处理JSONP。
基本思想是创建一个脚本标记,其中source作为远程URL。 remote方法使用回调和结果JSON数据返回包含函数调用的“脚本”。
答案 2 :(得分:0)
我最近遇到过这个问题。我一直在使用AJAX提交表单结果,以便页面元素可以自动更新。我的域名调用是正确的。关于数据库的SELECT
语句可行,但INSERT
,UPDATE
和DELETE
语句不会。
通过javascript显示进度的警报表明调用正常运行,但它永远不会进入该进程的php部分。简单的答案是表单的onsubmit
元素需要包含return false;
。添加之后,事情顺利进行。
<form name="form" action="" method="post" onsubmit="ProcessRequest(this);return false;">
希望这有帮助。