2014-03-04 93 views
3

我試圖使用serializeArray()將某些表單值序列化爲json對象,然後將表單值POST到服務中的WebMethod通過ajax調用將表單值傳遞給C#WebMethod

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#btn").click(function() { 
      var foobar = $(this).closest('#add-question').serializeArray(); 
      $.ajax({ 
       type: "POST", 
       url: "/Services/QuestionsService.asmx/SubmitQuestion", 
       data: "{foo:[" + JSON.stringify(foobar) + "]}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (data) { 
        $("#btn").text(data.d); 
       } 
      }); 
     }); 
    }); 
</script> 

,服務:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
[System.Web.Script.Services.ScriptService] 
public class QuestionsService : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public string SubmitQuestion(string foo) 
    { 
     //do something with foo 

     return "Message Sent"; 
    } 
} 

但是我一直得到的服務500錯誤:

請求格式是無法識別的URL在 '/ SubmitQuestion' 意外結束。

我發現其中建議增加一個類似的問題:

<system.web> 
    <webServices> 
    <protocols> 
     <add name="HttpGet"/> 
     <add name="HttpPost"/> 
    </protocols> 
    </webServices> 
</system.web> 

到Web.config,這似乎解決了第一個問題。但我現在得到的服務抱怨的形式參數foo丟失但它顯然已經提供了一個錯誤:

System.InvalidOperationException:缺少參數:FOO。 在System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection中收集) 在System.Web.Services.Protocols.UrlParameterReader.Read(HttpRequest的請求) 在System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() 在System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

有什麼我失蹤了嗎?

我覺得,因爲它擊中了網絡法測得的,如果我在一個簡單的JSON對象傳遞,例如它可能是與serializeArray()一個問題:

var obj = { foo: 'bar' }; 

我使用serializeArray()不正確?

這裏是data被字符串化後的輸出:

{ 
foo: [ 
    [ 
     { 
      "name": "__EVENTTARGET", 
      "value": "" 
     }, 
     { 
      "name": "__EVENTARGUMENT", 
      "value": "" 
     }, 
     { 
      "name": "__VIEWSTATE", 
      "value": "RHqOeKRh4e+2IZH9ZdPatwEklxypUzemNeDv7sO4l8vIR2TrECRFZvalrpbvVre0e6gkY9ZG3618dtU3BhYFW3YNn2y6VqeZlL5hmG/WPLTtZN8lhDkEl1bGOGWBsY52zVxWECkAC2hGtHwF5plmKsL3sHp3nFxh3yzWoGP1LwAc4sAZ/rgKvozqCp/4FfB6P4jBUQnL7Q5EkNsjWBntsXbUswC3cJpS22vgoJFHDh8Lm9n/VGzC86FUWipvGmOJ9/KVSlUBbJE3J0Fs6UZi+E6T1Ql+I8XBZlZOzDlbq40=" 
     }, 
     { 
      "name": "ctl00$MainContent$txtName", 
      "value": "name field" 
     }, 
     { 
      "name": "ctl00$MainContent$txtEmailAddress", 
      "value": "email address field" 
     }, 
     { 
      "name": "ctl00$MainContent$txtLocation", 
      "value": "location field" 
     }, 
     { 
      "name": "ctl00$MainContent$chkAnonymous", 
      "value": "on" 
     }, 
     { 
      "name": "ctl00$MainContent$txtQuestion", 
      "value": "question field" 
     }, 
     { 
      "name": "__EVENTVALIDATION", 
      "value": "ileV4/vPquayqiSQJEAvq1oHpIAkHN+fy4QhqOrQpp7NxE4z15rvbTH6BfaSCFFwt96JAp1aqQzuOFCTzc6KSEE6iWDmSDRcJWWOzyksSoXpAMBwLk3F6oAaWa4EIjEUb+2b/PJobySl5BaU3TG0JCZyHK2fxj5HXd8DG89gnmVXemTwq1Ax4BgJw1Z5z1uT8Sw7Xk6inUHAZ0NJH4QdTQ==" 
     } 
    ] 
] 

}

+0

'$(「#附加問題」)serializeArray()'什麼是它的輸出? – Jai

+0

你應該'.serializeArray()'你的表格。這是'$('#add-question')'你的表單的ID嗎? – Jai

+0

@Jai,是的,這是我的形式。我會將輸出添加爲問題的圖像,而不是將其粘貼到此處。 – DGibbs

回答

2

我解決了這個問題。我需要做的WebMethodobject的參數,而不是一個string

[WebMethod] 
public string SubmitQuestion(object foo) 
{ 
    //do something with foo 

    return "Message Sent"; 
} 
1

嘗試發送數據

data: {'foo': JSON.stringify(foobar)}, 

data: {foo: JSON.stringify(foobar)}, 

數據會被髮送爲json和存儲的值是一個字符串,將傳遞到您的webmethod的字符串參數

+0

不幸的是,這是我已經嘗試過的東西 – DGibbs

+0

您在第二次錯誤後嘗試了嗎消息(System.InvalidOperationException:缺少參數:foo。at ...)嗎? – HCJ

+0

我確實:( – DGibbs

相關問題