2014-03-02 157 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,這是一個問題嗎? –