2012-01-11 125 views
2

我写了一个web服务。我正在使用JavaScript调用此Web服务。我从不同的域调用这个。为此,我在Web服务中添加了[System.Web.Script.Services.ScriptService]属性。从JavaScript我打电话使用XMLHttpRequest服务。我使用Firefox进行了测试,一切都很顺利。但它在IE中不起作用。使用JavaScript调用跨域asmx网络服务

经过一番搜索,我发现这是一个与有关的问题跨域调用。我已经通过了这里发布的一些问题。然后,我做我的代码如下变化 -

  1. 从JavaScript我现在要求使用XDomainRequest服务。

  2. 我已新增下列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)。

我错过了什么吗?

回答

-1

您的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); 
    } 
}); 
+2

他试图提出一个跨域请求 - 这是行不通的。另外,jQuery只是包装XHR。 – 2012-01-11 15:00:57

+0

对不起,改正! – 2012-01-11 15:41:19

+0

重要的是要明白,詹姆斯的插件使用YQL通过公共第三方来反弹请求,使用JSONP支持增强他们的请求,而不是实际解决底层的跨源问题。 – 2012-01-11 20:19:01

1

您在IE问题的症结是,XDomainRequest不支持预检必要作出交叉包含Content-Type标头的域请求。我相信这是固定在IE10,但even IE9 doesn't fully support CORS

为了在不支持CORS的浏览器中可靠地向ScriptServices发出跨域请求,a server-side proxy(不幸地)是您最好的选择。