2011-09-02 97 views
2

我有jQuery wcf方法從aspx頁面與jQuery的問題。通過jQuery調用JSON wcf服務

這是我的測試方法:

[ServiceContract] 
    public interface IEParcelService 
    { 
     [OperationContract] 
     [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "Test")] 
     Response<string> Test(); 
    } 

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class EParcelServiceImpl : IEParcelService 
    {  
    public Response<string> Test() 
    { 
     return WebServiceHelper.Execute(() => "Test Message"); 
    }  
    } 

此服務部署到IIS。 當我從Chrome調用此方法時:http://localhost/TestService/ServiceImpl.svc/Test 一切都很好,我可以看到結果。但是,當我從jQuery 調用它時,我有錯誤:NETWORK_ERR:XMLHttpRequest異常101.我嘗試在Google中找到解決方案。 但結果並不成功。我如何解決它?

jQuery的電話:

<script language="javascript"> 
    $().ready(function() { 
      $("#myButt").click(function() { 

       $.ajax({ 
        cache: false, 
        async: false, 
        type: "GET", 
        url: "http://localhost/EParselService/EParcelServiceImpl.svc/Test", 
        contentType: "application/json", 
        dataType: "json", 
        success: function (data, textStatus){ 
           alert('successCallBack called'); 
           alert(data); 
           alert(textStatus); 
         }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
          alert('errorCallBack called'); 
          alert('textStatus = ' + textStatus + '/nerrorThrown = ' + errorThrown); 
         } 
       }); 
       alert('Done!'); 
      }); 
     }); 
</script> 

<input type="button" value="Get values from server" id="myButt" /> 
+0

這可能是一個跨站點問題。你是否在同一個iis上託管你的html?看看這裏:http://jasonkelly.net/2009/05/using-jquery-jsonp-for-cross-domain-ajax-with-wcf-services/。 – albertjan

+0

我在IIS上託管服務,但是我的測試網站在Visual Studio Development Server上運行。 – ukraine

+0

你好,你應該在同一個網站上託管它們。如果你想使用XMLHttpRequest,因爲它不允許打開它的範圍。這是爲了防止XSS攻擊。如果你想從一個不同的網站使用追索權,你將不得不使用類似jsonp的東西(請參閱我以前發佈的內容)。 – albertjan

回答

1

所以這是一個同源問題。 (請參閱here

對於XMLHttpRequest,資源必須位於與請求它的頁面完全相同的域。這是爲了防止XSS(見here)。如果你想使用來自不同域的資源,你必須使用類似jsonp的東西。 (請參閱here)有關如何使用WCF執行此操作的好教程。

+0

您提供的鏈接不再有效。 – PsychoDUCK

+0

@PsychoDUCK我修復了這個鏈接。我收到的博客文章已不再可用。但我發現了另一個基本上提供相同信息的人 – albertjan