使用JavaScript调用跨域asmx网络服务
我写了一个web服务。我正在使用JavaScript调用此Web服务。我从不同的域调用这个。为此,我在Web服务中添加了[System.Web.Script.Services.ScriptService]
属性。从JavaScript我打电话使用XMLHttpRequest服务。我使用Firefox进行了测试,一切都很顺利。但它在IE中不起作用。使用JavaScript调用跨域asmx网络服务
经过一番搜索,我发现这是一个与有关的问题跨域调用。我已经通过了这里发布的一些问题。然后,我做我的代码如下变化 -
从JavaScript我现在要求使用XDomainRequest服务。
我已新增下列befor在Web服务中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)。
我错过了什么吗?
您的Web服务通过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);
}
});
他使用的服务类型不支持JSONP。 – 2012-01-11 20:14:54
您在IE问题的症结是,XDomainRequest不支持预检必要作出交叉包含Content-Type标头的域请求。我相信这是固定在IE10,但even IE9 doesn't fully support CORS。
为了在不支持CORS的浏览器中可靠地向ScriptServices发出跨域请求,a server-side proxy(不幸地)是您最好的选择。
他试图提出一个跨域请求 - 这是行不通的。另外,jQuery只是包装XHR。 – 2012-01-11 15:00:57
对不起,改正! – 2012-01-11 15:41:19
重要的是要明白,詹姆斯的插件使用YQL通过公共第三方来反弹请求,使用JSONP支持增强他们的请求,而不是实际解决底层的跨源问题。 – 2012-01-11 20:19:01