2010-05-24 80 views
2

我想用jQuery調用ac#web服務調用c.ashx,它檢查用戶名是否有效,並返回錯誤消息作爲串。如何使用jQuery調用c#webservice來獲取返回值

我應該爲數據提供什麼內容類型:如果c#webservice的返回值是一個字符串值?

jQuery.ajax({ 
type: "GET", 
url: "/services/CheckUserName.ashx", 
data: "", 
contenttype: "", 

success: function (msg) { 
    alert("success"); 

}, 
error: function (msg, text) { 
    alert(text); 
} 
}); 

我創建了一個.asmx文件代替,但它並不會被所謂的jQuery。以下是否正確?

jQuery.validator.addMethod("UsernameCheck", function (value, element) { 
    jQuery.ajax({ 
     type: "POST", 
     url: "/services/CheckUsername.asmx?CheckUsername", 
     data: '{ "context": "' + jQuery("#username").value + '"}', 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 

     success: function (msg) { 
      alert("success"); 

     }, 
     error: function (msg, text) { 
      alert(text); 
     } 
    }); 
}); 

回答

5

數據應該包含您在Web服務中調用的方法的參數。但是,ashx擴展用於HTTP處理程序,對於這種情況不是一個好的選擇。應該使用Web服務來代替。

所以,如果你分別致電/services/LoginServices.asmx?CheckUserName,並且CheckUserName.asmx有一個WebMethod ValidateUser

public string ValidateUser(string username) 

那麼data屬性的jQuery將

data: '{ "username": "' + usernameValue + '"}' 

contentType應該是application/json; charset=utf-8dataType應該是"json"

請注意,您不打電話/services/CheckUserName.asmx,Web服務中該方法的名稱必須附加到web服務url。

此外,您需要將type更改爲"POST"

這裏有一個完整的例子:

$.ajax({ 
type: 'POST', 
url: 'LoginServices.asmx/CheckUserName', 
data: '{"username": "' + usernameValue + '"}', 
contentType: 'application/json; charset=utf-8', 
dataType: 'json', 
success: function(msg) { 
    alert("Result: " + msg); 
}, 
error: function(XMLHttpRequest, textStatus, errorThrown) { 
    alert("Error: " + textStatus); 
}}); 

希望這有助於

+0

感謝您的答覆:)當我註釋掉數據的C#方法只叫:行,它的錯誤,因爲用戶輸入的用戶名不會被傳遞給c#方法。 c#文件中的方法是public void ProcessRequest(HttpContext context){},它使用字符串_username = context.Request [「username」]獲取用戶名。 - 我應該將此方法更改爲公共字符串ValidateUser(字符串用戶名)?或者我們可以通過不同的方式傳遞用戶名? 謝謝, – Theomax 2010-05-24 16:01:48

+0

聽起來就像你使用HTTP處理程序而不是Web服務,這是什麼原因?可以使用一個處理程序,這只是一種不常見的做法,實現將會有所不同。我的回答是基於使用Web服務而不是處理程序。對困惑感到抱歉。 – 2010-05-24 16:25:14

+0

HTTP處理程序已經存在 - 你能提供一個使用這個代碼的例子嗎?我創建了一個.asmx webservice,但它沒有被調用。 – Theomax 2010-05-25 10:13:51

0

jQuery代碼是行不通的,因爲它沒有調用web服務。我通過創建一個HTTP處理程序類並將其傳遞給用戶名來解決這個問題。我的價值改變數據:以下,並通過了用戶輸入的用戶名:

data: "username=" + jQuery("#username").val(), 
相關問題