2012-01-17 95 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。