我对这个感到疯狂......
我使用C#创建了一个RESTful.NET Web服务,并作为独立服务运行。当我创建XMLHttpRequest来检索JSON数据时,所有浏览器都会失败,除了IE,因为XMLHttpRequest实例的状态标志始终为0 - 它应该是200,这就是IE发生的情况。
我已经读过0是不在网络服务器上的静态html页面的正确值。所以,我安装了Apache并将页面放在那里,但结果是一样的(我可能错误地解释了这个建议......)
我运行了Fiddler,并且始终可以为任何浏览器正确检索请求!
这是我正在使用的JavaScript代码:
<script type="text/javascript">
var serviceURI = 'http://localhost:8889/WebService/client/25';
var xmlHttp = new XMLHttpRequest();
function clientHandler()
{
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
{
var json = xmlHttp.responseText;
var client_id = document.getElementById('clientid');
var client_name = document.getElementById('clientname');
var client_address = document.getElementById('clientaddress');
var client_phone = document.getElementById('clientphone');
var client = eval('(' + xmlHttp.responseText + ')');
client_id.value = client.id;
client_name.value = client.name;
client_address.value = client.address;
client_phone.value = client.phoneNumber;
}
else
alert("Error:\nxmlHttp.responseText = " + xmlHttp.responseText + "\nstatus = " + xmlHttp.status);
}
function sendRequest()
{
if (xmlHttp)
{
xmlHttp.onreadystatechange = clientHandler;
xmlHttp.open('GET', serviceURI, true);
xmlHttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
xmlHttp.send(null);
}
else
alert('xmlHttp not defined!');
}
</script>
如果有人能解释我发生了什么,我会很高兴的。我没有找到任何令人满意的探索......
另外,使用像jQuery这样的框架更好吗?
谢谢大家!
PS:我已经咨询了Jon Flanders的RESTful.NET,但它在解决这个方面没有太大作用...... :(修改:我将此问题的答案移到了评论下面!
答案 0 :(得分:3)
Internet Explorer使用与其他浏览器不同的对象来发出Ajax请求 Microsoft使用Microsoft.XMLHTTP对象,而其他浏览器使用XMLHttpRequest对象。
这里有一篇文章解释它并解释如何解决方法。
http://ajaxpatterns.org/Cross-Browser_Component
最好的办法是使用众多库中的一个来制作Ajax请求。 the'll会为你处理抽象。我看到你的帖子被标记为C#。如果是这种情况并且您正在使用Asp.NET开发页面,那么您可能正在使用标准的Asp.Net Ajax工具(ScriptManager和UpdatePanel),尽管很多人更喜欢使用JQuery。
答案 1 :(得分:3)
目前的问题与同源政策有关。我在StackOverflow上发现了2篇帮助我确定问题的文章:
问题的解决方案是here!我将以下行添加到服务器的方法中:
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
通过为每个方法添加此行,响应的标题如下:
HTTP/1.1 200 OK
Content-Length: 81
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/1.0
Access-Control-Allow-Origin: *
Date: Sun, 31 Oct 2010 02:34:34 GMT
<json data>
这种服务适用于Firefox,Safari,Chrome和IE。但是,正如在回答的链接上所说,必须有更好的方法来解决这个问题。我会试着找到一些关于它的东西:)