2009-11-27 126 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;"> 

希望這會有所幫助。