2014-03-02 158 views
2

我一直在这个问题上停留了好几个小时,无法找到有效的答案,也许是因为我缺乏这方面的知识/经验。使用jQuery在远程服务器上调用Web服务

我知道,由于同源限制,我无法使用XMLHttpRequest在远程服务器上加载Web服务,但显然这可以使用jsonp数据类型并提供回调函数来完成,但我真的无法弄清楚如何使它工作。

远程服务器将是我的,所以我并不真正关心远程服务器可能发回任何恶意JavaScript代码的可能性。

我将不胜感激,如果有人可以帮助我在http://www.antoinecloutier.com/WebService1.asmx/HelloWorld

我已经创建了我的服务器和Web服务在测试页面以获取与web服务的一些工作代码工作正常 - >http://antoinecloutier.com/test.html

现在,我需要能够从另一台服务器访问该Web服务。

谢谢!

jQuery.support.cors = true; 
    $.ajax({ 
     url: 'http://crossdomainurl', 
     type: 'GET', 
     dataType: 'json', 
     contentType: "application/json; charset=utf-8",   
     success: function (data) {     
      WriteResponse(data); 
     }, 
     error: function (x, y, z) { 
      alert(x + '\n' + y + '\n' + z); 
     } 
    }); 

为了确保跨域正常工作,你将有一个Access-Control-Allow-Origin: *响应头添加到Web服务响应:

回答

3

您可以通过启用CORS

对于如使Cross Domain AJAX Calls using jquery

在.NET WCF服务,您可以添加到您的服务在Global.asax如下,

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin","*"); 
} 

在PHP中,你可以如下修改响应,

<?php header('Access-Control-Allow-Origin: *'); ?> 

Note:

发送Access-Control-Allow-Origin头允许基本的跨源访问,但调用ASP.NET服务,如ASMX ScriptServices,ASPX页面方法和WCF s ervices启用AspNetCompatibilityRequirements需要你的网站有一个额外的CORS头回应:Access-Control-Allow-Headers

可以在web.config配置相同如下,

<system.webServer> 
    <httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
    </customHeaders> 
    </httpProtocol> 
</system.webServer> 
+0

http://pastie.org/private/7jlh6y1vqa1cjv8bjec0g 灿你能帮我用这段代码得到一个有效的例子吗? –

+0

@ newblt123查看更新答案。 –

+0

我已经将Access-Control-Allow-Origin添加到了我的Application_BeginRequest中,但我仍然收到以下错误: XMLHttpRequest无法加载http://www.antoinecloutier.com/WebService1.asmx/HelloWorld。该请求被重定向到“http://antoinecloutier.com/WebService1.asmx/HelloWorld”,该请求被禁止用于需要预检的跨源请求。 以下是代码:http://pastie.org/private/nvtldi38lto21p3vnswglq。 我正在使用ASMX服务而不是WCF,这是一个问题吗? –