2011-01-14 50 views
3

我很難搞清楚如何從jQuery的POST中讀取json字符串(我見過的大多數文章展示瞭如何發送json,但不是如何從Web服務接收到請求消息得到它jQuery/json從.NET的Web服務中讀POST參數

這是我到目前爲止已經編寫的代碼

在客戶端:。

<input type="text" id="UserNameText" /> 
<br /> 
<input type="password" id="PasswordText" /> 
<br /> 
<input type="button" id="Login" value="Login" onclick="DoLogin();" /> 

<script type="text/javascript" language="javascript"> 
    function DoLogin() 
    { 
     var un = document.getElementById('UserNameText').value; 
     var pw = document.getElementById('PasswordText').value; 
     var info = "{ 'UserName':'" + un + "', 'Password':'" + pw + "'}"; 

     $.ajax(
     { 
      type: "POST", 
      url: "http://localhost:60876/Login.asmx/LoginSpecial", 
      dataType: 'json', 
      data: info, 
      contentType: "application/json; charset=utf-8", 
      success: function (msg) { alert(msg.d); }, 
      error: function (msg) { alert(msg.responseText); } 
     }); 
    } 
</script> 

在服務器端我已經得到了這個:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
[WebMethod] 
public string LoginSpecial() 
{ 
    // none of these seem to be working 
    NameValueCollection parameters = HttpContext.Current.Request.Params; 
    string p = parameters["QUERY_STRING"] != null ? parameters["QUERY_STRING"].ToString() : String.Empty; 
    string info = HttpContext.Current.Request["info"] != null ? HttpContext.Current.Request["info"].ToString() : String.Empty; 
    string data = HttpContext.Current.Request["data"] != null ? HttpContext.Current.Request["data"].ToString() : String.Empty; 

    // test json string, need to read from the jquery post 
    string json = "{ 'UserName':'test', 'Password':'test'}"; 

    // the following two lines of code work ok with the test json string above. 
    JavaScriptSerializer serial = new JavaScriptSerializer(); 
    Credentials credential = (Credentials)serial.Deserialize(json, typeof(Credentials)); 

    return "Some json message here"; 
} 

我已經設置了斷點,並按預期擊中了Web服務,我只是無法弄清楚如何從POST消息中獲取json字符串。

回答

0

的參數添加到您的方法,

[WebMethod] 
LoginSpecial(string something) 
{ 
} 
+0

我試過:公共字符串LoginSpecial(字符串參數) 現在當我調用web服務我得到以下錯誤:無效的Web服務調用,參數缺失值:\ u0027parameter \ u0027。「,」StackTrace「:」.... – 2011-01-14 15:08:35

4

如果你希望你的Web服務方法與提交的JSON對象的工作,你有你的方法簽名更改爲:

[WebMethod] 
LoginSpecial(string Username, string Password) 
{ 
} 

您向AJAX調用的data屬性提供的JSON對象必須具有與Web服務方法簽名的參數名稱相匹配的屬性名稱。

如果你想提交的參數列表,你必須提交對象的數組,並在您的Web服務創建一個包裝.NET對象如下解釋:

Using jQuery to POST Form Data to an ASP.NET ASMX AJAX Web Service

希望有所幫助。

2

在服務器端使用的庫:

Newtonsoft.Json.Linq =>下載JSON.net從http://james.networking.com/projects/json-net.aspx

,代碼:

 System.IO.StreamReader sr = new System.IO.StreamReader(Request.InputStream); 

     string line = ""; 

     line = sr.ReadToEnd(); 

     JObject jo = JObject.Parse(line); 

     string something = (string)jo["something"]