没有使用XmlHttpRequest收到回复

时间:2011-02-26 22:21:21

标签: ajax json xmlhttprequest

我正在尝试编写一个小脚本,它可以发送请求并下载json响应。

var xmlhttp = false;

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

      xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4)
        {
         // I tried checking for status but that is always coming 0
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText+"a";
        }
      }*/
      var url = 'http://exampleurl.com/api?input=a@b.com';
    xmlhttp.open('GET',url,true);
    xmlhttp.send(null);

现在,如果我用文本文件替换URL,它可以正常工作。但是我的服务器正在以JSON编码进行回复。此外,如果我在浏览器中访问该URL,它会显示所需的输出。

然而,当我使用XmlHttpRequest查询它时,它总是给我一个状态0,并且具有空响应(无需解码)。

2 个答案:

答案 0 :(得分:1)

您是否尝试过编码查询参数的URL?看起来你可能会发送特殊字符。

正如kjy112所述,将客户端请求发送到其他域,甚至子域 - 相同的原始策略存在限制。

更新: Inder,请参阅http://en.wikipedia.org/wiki/Same_origin_policy,这是一种安全机制,可以阻止您尝试执行的操作。

以下是解决问题的方法: 让您的服务器代表您的客户拨打电话。我的意思是接受你要从浏览器调用的电​​话(通过AJAX),并使其成为服务器上的Web服务。然后将您的AJAX呼叫转到您的服务器,然后该服务器将进行呼叫并返回响应。所以,您正在使用您的服务器作为中间人。

或者

如果是公共API,则可能是为JSONP配置的(http://ajaxian.com/archives/jsonp-json-with-padding)

答案 1 :(得分:0)

我通常在验证xmlhttp.status后验证readyState(200就是你想要的)

您是否尝试过检查xmlhttp.statusText以查看它是否包含任何有趣内容?