2013-01-14 181 views
0

我是新的AJAX,我試圖訪問一個WCF Web服務方式如下:爲什麼我不能用Javascript訪問我的WCF Web服務?

$(function() { 
    $('#formNew').submit(function() { 
     var datos = { 
      "Nombre": $('#nombre').val(), 
      "ApellidoP": $('#appP').val(), 
      "ApellidoM": $('#appM').val(), 
      "UserName": $('#username').val(), 
      "Password": $('#password').val(), 
     }; 
     var args = "Data=" + JSON.stringify(datos); 
     var url = 'http://127.0.0.1:81/SismosService.svc/usuario/new?' + args; 
     alert(url); 
     $.ajax({ 
      type: 'GET', 
      url: url, 
      success: function (data) { 
       alert("Exito " + JSON.stringify(data)); 
      }, 
      error: function (data) { 
       alert("Error " + JSON.stringify(data)); 
      } 
     }); 
    }); 
}); 

當我填寫表格,然後點擊提交按鈕,我得到以下的Firebug的錯誤:

ñ

S_ERROR_NOT_AVAILABLE: prompt aborted by user 
[Break On This Error] 

throw Components.Exception("prompt aborted by user", Cr.NS_ERROR_NOT_AVAILABLE) 

我的web服務定義如下:

[WebGet(UriTemplate = "/usuario/new?Data={data}", 
    RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare)] 
    ResponseObject<Usuarios> NewUsuario(string data); 

我在做什麼錯了?這是我發送參數的方式嗎?是我嘗試訪問Web服務的方式嗎?謝謝你的幫助。

回答

0

The JSON.stringify(data)用途是將JavaScript對象轉換爲json表示形式。

我認爲,在成功\錯誤功能,你需要走另一條路:

success: function (data) { 
          alert("Exito " + JSON.parse(data)); 
          }, 
error: function (data) { 
          alert("Error " + JSON.parse(data)); 
          } 

(使用JSON.parse,JSON.stringify時 - 確保你包括json2.min.js的中你的項目)

+0

不解決我的問題,沒有對Web服務進行調用,我在選項卡上覆制粘貼了我的url變量,並且它訪問端點,我不知道爲什麼不訪問端點。 –

0

我通常使用下面的配置,以使我的WCF服務的Ajax調用:

1)首先,我在Web.config中創建一個JSON端點的行爲和我的服務給它相關聯:

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
     <behavior name="WebHttpJson"> 
     <webHttp defaultBodyStyle="Wrapped" 
       defaultOutgoingResponseFormat="Json" /> 
     </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <services> 
    <service name="MyApp.LoginService"> 
     <endpoint address="" 
       behaviorConfiguration="WebHttpJson" 
       binding="webHttpBinding" 
       contract="MyApp.LoginService" /> 
    </service> 
    </services> 
</system.serviceModel> 

2)然後,我可以簡單地定義我的WCF服務是這樣的:

[ServiceContract] 
public class LoginService 
{ 
    [OperationContract] 
    public void SignIn(string email, string pswd) 
    { 
     // Check credentials and create session cookie 
    } 
} 

3),最終使jQuery的Ajax調用像下面顯示:

$.ajax({ 
    contentType: 'application/json; charset=utf-8', 
    url: serviceUrl + '/SignIn', 
    type: 'POST', 
    data: JSON.stringify({ 
     email: '[email protected]', 
     pswd: 'qwerty' 
    }), 
    success: function() { alert('success!'); }, 
    error: function() { alert('error!'); } 
}); 
+0

我不明白爲什麼我應該用OperationContract屬性替換WebGet屬性,它似乎沒有更多的方法來配置每個端點。但是,它仍然不起作用。 我使我的web.config看起來像[this](http://pastebin.com/dTnNJDj6),[this](http://pastebin.com/8gZ2CG5z)是我如何定義添加新用戶的方法,這](http://pastebin.com/5pnpqjma)是我的JavaScript函數如何使電話看起來像。我覺得我沒有清楚地解釋自己,出於某種原因,我無法通過ajax打電話給終端,我真的很困惑,我是新手。 –

+0

1)您必須使用[OperationContract Attribute](http://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.aspx)來指示哪些方法是WCF服務的一部分; 2)你的Web.Config看起來很好,如果你的應用編譯沒有錯誤,它可能是; 3)刪除C#方法中當前使用的所有屬性,其中一些與Web.Config衝突; 4)你的ajax調用中的** url **是錯誤的,它應該以你的方法名* NewUsuario *結束,但以* new *結尾; 5)更改* args *字符串以** data = **開頭(區分大小寫) –

+0

Uri模板屬性讓我指定我正在訪問的url,這就是爲什麼我要訪問/ usuario/new而不是NewUsuario,它如果我通過瀏覽器訪問它,則會起作用。無論如何,我刪除了所有的WebGet,並嘗試訪問127.0.0.1:81/SismosService。svc/GetUsuarios但它沒有工作,它說方法不允許 –

相關問題