使用xhr的Javascript代码不起作用?

时间:2012-01-17 08:57:19

标签: javascript rest

以下是来自服务器的响应(根据Google Chrome rest-client):

下面是我用来将一些数据发布到我们服务器的代码片段。我想将数据作为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>

2 个答案:

答案 0 :(得分: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,您的工作就越快。

答案 1 :(得分:0)

如果xml文件中名为token的元素是xml元素,而不是属性,那么用 - 替换以下行 -

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

by -

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

我没有问你XHR是否正确地返回了XML。