我在VS 2010 Web应用程序中定义了一个html文件,如下所示:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script src="Scripts/test.js" type="text/javascript"></script>
</head>
<body>
</body>
</html>
在test.js中,对ASMX Web服务方法的调用非常简单:
$.ajax({
type: "POST",
contentType: "application/json",
dataType: "json",
url: "http://myremotedomain/MyRemoteResource.asmx/thisMethodReturnsName",
data: "{'name':'testname'}",
success: function (msg) {
alert(msg.d);
},
error: function (xhrObj, msg) {
console.log(msg);
}
});
当我在Visual Studio中运行此项目并访问Chrome(v35)或Firefox(v25)中的HTML页面时,由于我没有在远程Web服务器上启用CORS,因此我预计会收到跨域错误:
XMLHttpRequest cannot load http://myremotedomain/MyRemoteResource.asmx/thisMethodReturnsName. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:58828' is therefore not allowed access.
然而,这个ajax调用对我来说在IE9中工作得很好(我得到了正确响应的警告对话框)!这怎么可能?此调用不是对同一台机器上的资源(localhost)进行的。 Web方法托管在完全不同的服务器上。我是否错过了对CORS限制如何在这里工作的某种有趣的解释?
我怀疑这很重要,但是当代码在类似结构的aspx页面(而不是html)中时,我得到相同的结果。我在一个不幸仍然运行IE9的环境中,所以我无法测试,看看我是否在IE10 / IE11中得到了相同的结果。