我写了一个网络服务。我使用JavaScript调用此Web服务。我是从不同的域名调用它。为此,我在Web服务中添加了[System.Web.Script.Services.ScriptService]
属性。从JavaScript我使用 XMLHttpRequest 调用该服务。我用Firefox测试过,一切都很好。但它不适用于IE。
经过一些搜索,我发现这是与跨域调用相关的问题。我已经介绍了这里发布的一些问题。然后我在代码中做了以下更改 -
从javaScript我现在使用 XDomainRequest 调用该服务。
我在网络服务中为return语句添加了以下行 - HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Credentials", "true");
return result;
它在firefox中仍然可以正常工作。但是在IE8中(根据我的知识,XDomainRequest在IE的较低版本中不起作用)它显示错误( XDomainRequest.onerror )。
我错过了什么吗?
答案 0 :(得分:1)
IE中问题的症结在于XDomainRequest不支持进行包含Content-Type标头的跨域请求所需的预先飞行。我相信这已在IE10中修复,但even IE9 doesn't fully support CORS。
为了在不支持CORS的浏览器中可靠地向ScriptServices发出跨域请求,a server-side proxy(不幸的是)是您最好的选择。
答案 1 :(得分:0)
答案 2 :(得分:-1)
你的网络服务是通过HTTP运行的吗?
我不建议使用原生XMLHttpRequest来发出ajax请求,也许你应该使用Jquery来做这件事,我总是以这种方式做,并且适用于所有现代浏览器:
即:
function Activate(EmailId, controle) {
$.ajax({
type: "POST",
url: "/Page/Method",
data: "&EmailId=" + EmailId,
success: function (message) {
$(controle).text(message);
}
});
}
编辑:要发出跨域请求,您可以使用James Padolsey插件,并执行以下操作:
$('#container').load('http://google.com');
$.ajax({
url: 'http://news.bbc.co.uk',
type: 'GET',
success: function(res) {
var headline = $(res.responseText).find('a.tsh').text();
alert(headline);
}
});