2009-11-27 128 views
3

当我使用此代码发出AJAX请求时,它将状态返回为0.我做错了什么?此外,此代码仅用于各种原因在Firefox中工作。AJAX请求状态返回0

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); 
} 
} 
} 

回答

3

如果您尝试连接到另一台服务器,该same origin policy会阻止你:

“原产地”使用 域名定义的术语,应用层 协议,并(在大多数浏览器)TCP 运行 脚本的HTML文档的端口。两个资源被认为是 是相同的来源当且仅当 如果所有这些值完全相同 相同。

+0

呵呵? 喜欢,我只能使用ajax连接到相同的网址作为我的网页? – 2009-11-27 19:08:17

+0

不,相同的服务器/端口:请参阅http://en.wikipedia.org/wiki/Same_origin_policy – Jerome 2009-11-27 19:09:57

+0

好的,有反正我可以解决这个问题吗? – 2009-11-27 19:16:34

1

jquery.com如果您使用JSONP和回调,则只能连接到另一台服务器。另一台服务器需要支持JSONP /回调机制。此方法涉及创建一个新的脚本标记,然后让远程服务器将回调代码返回到此脚本标记中。查看jQuery源代码(或简单地使用它)来查看它处理JSONP。

其基本思路是创建一个脚本标记,并将源代码作为远程URL。远程方法返回一个包含使用回调和生成的JSON数据的函数调用的“脚本”。

0

我最近遇到这个问题。我一直在使用AJAX提交表单结果,以便页面元素可以自动更新。我的域名电话是正确的。数据库上的SELECT语句将工作,但INSERT,UPDATEDELETE语句不会。

通过JavaScript显示进度的警报表明该调用运行正常,但它永远不会进入该进程的php部分。简单的答案是,表单的onsubmit元素需要包含return false;。添加后,事情顺利进行。

<form name="form" action="" method="post" onsubmit="ProcessRequest(this);return false;"> 

希望这会有所帮助。