2012-01-17 61 views
0

以下是服務器的響應(根據谷歌瀏覽器rest客戶端):使用xhr的Javascript代碼不工作?

下面是我用來發布一些數據到我們的服務器的代碼片段。我想以xml輸出取回數據。 記住同源策略的概念我把這段代碼作爲html頁面上傳到我們的服務器上,但沒有得到任何迴應。

我的代碼有什麼問題,或者我的方法有問題嗎?

<html> 
<head> 
<script type="text/javascript"> 
function getToken() 
{ 
var xmlhttp; 
var txt,x,i; 


if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

alert("stage 1"); 
xmlhttp.onreadystatechange=function() 
    { 
    alert("stage 2"); 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     alert("stage 3"); 
    xmlDoc=xmlhttp.responseXML; 
    txt=""; 
    x=xmlDoc.getElementsByTagName("token"); 
    alert("stage 4"); 
     for (i=0;i<x.length;i++) 
     { 
     txt=txt + x[i].childNodes[0].nodeValue + "<br />"; 
     } 
     document.getElementById("myDiv").innerHTML=txt; 
    } 


    } 
alert("stage 5"); 
xmlhttp.open("POST","http://abc.mysite.com:9090/myapi/xxx",true); 
xmlhttp.send("op=login&pass=xxx"); 
} 
</script> 
</head> 

<body> 



<center><h2>UserPreview:</h2></center> 
<br /> 
<div id="myDiv"></div> 
<br /> 
<button type="button" onclick="getToken()">GetToken</button> 
<div data-role="footer" data-position="fixed" data-theme="a"><h4>Ver: 1.1(17112)</h4> </div> 
</body> 
</html> 

<response><token>8768768768768768</token></response> 
+1

爲什麼你不使用jQuery,這使得你所有的發佈更容易! – 2012-01-17 08:59:29

+0

您可以使用dojo/jQuery,它們具有爲您使用ajax的功能! – 2012-01-17 10:20:17

+0

@mrana,你有沒有看過我的回答,然後試試? – netadictos 2012-01-17 18:16:29

回答

2

您必須考慮到:對於AJAX調用,您只能訪問與加載頁面相同的主機名(和端口/方案)。總是相同的域和相同的PORT

How exactly is the same-domain policy enforced?

在我使用的IE版本的過去,我想可能的兼容性問題:

try { 
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
        } 
        catch(e) 
        { 
         try 
         { 

         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 

         }catch(e){} 

我總是把代碼像這樣:

var THEURL="http://mysite.abc.com:8080/myapi/xxx" 
var data="op=login&pass=xxx"; 
http.open("POST",THEURL, true); 

http.onreadystatechange = function(){ 

}; 
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
xmlhttp.setRequestHeader("Content-length", data.length); 
xmlhttp.setRequestHeader("Connection", "close"); 
xmlhttp.send(data); 

你不能使用jQuery嗎?它效率更高。

爲了使Ajax調用: http://api.jquery.com/jQuery.ajax/

例如:

$.ajax({ 
    url: "test.html", 
    context: document.body, 
    success: function(){ 
    $(this).addClass("done"); 
    } 
}); 

您使用jQuery越早越快您的工作將變得更快。

0

如果被標記在XML文件中的元素是XML元素,而不是屬性,那麼您可以通過替換以下行 -

txt=txt + x[i].childNodes[0].nodeValue + "<br />"; 

通過 -

txt += (window.ActiveXObject)?x[i].childNodes[0].text : x[i].childNodes[0].textContent; 

我沒有問你,你的XHR是否正確地向你返回XML。