我正在尝试编写一个小脚本,它可以发送请求并下载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,并且具有空响应(无需解码)。
答案 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
以查看它是否包含任何有趣内容?