2014-03-04 4 views
3

serializeArray()을 사용하여 json 개체로 일부 양식 값을 serialize하고 양식 값을 서비스의 WebMethod으로 POST하려고합니다. POST 양식 값을 ajax 호출을 통해 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> 

그리고 서비스 :

요구 포맷이 예기치 않게 '/ SubmitQuestion'로 끝나는 URL에 대한 인식되지 않는 :

[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 오류가 있었다. 이 첫 번째 문제를 해결하기 위해 듯의 Web.config에

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

:

나는 추가 권장 비슷한 질문을 발견했다.

System.InvalidOperationException : 누락 된 매개 변수 : foo는하지만 지금은 양식 매개 변수 foo가 누락 아직 명확하게 공급 된 것을 불평 서비스에서 오류가 발생합니다. System.Web.Services.Protocols.HttpServerProtocol.ReadParameters에서 System.Web.Services.Protocols.UrlParameterReader.Read (HttpRequest를 요청)에 System.Web.Services.Protocols.ValueCollectionParameterReader.Read (NameValueCollection은 컬렉션) 에서 () 012.WebServiceHandler.CoreProcessRequest()

누락 된 항목이 있습니까?

var obj = { foo: 'bar' }; 

내가 잘못 serializeArray() 사용하고 있습니다 :

는 내가 같은 간단한 JSON 객체를 전달 경우 웹 메소드 좋은 안타가 serializeArray()에 문제가있을 것 같아요?

{ 
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==" 
     } 
    ] 
] 

}

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

또는

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

데이터가하는 것처럼 데이터를 전송할

+0

'$ ('# 추가 질문') serializeArray()'그것의 출력은 무엇인가.? – Jai

+0

폼을 .serializeArray()해야합니다. 이'$ ('# add-question')'귀하의 양식의 ID입니까? – Jai

+0

@Jai, 네, 그건 제 형식입니다.질문을 이미지에 붙여 넣기보다는 이미지에 출력을 추가하겠습니다. – DGibbs

답변

2

이 문제를 해결했습니다. 나는 WebMethodobject의 매개 변수를 만드는 데 필요한 오히려 string (A)보다 :

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

    return "Message Sent"; 
} 
1

시도 : 여기

는도 캐릭터 라인 후의 data의 출력 인 json으로 전송되고 저장된 값은 문자열의 매개 변수로 전달됩니다.

+0

을 실행합니다. 불행히도 이것은 이미 시도한 것입니다 – DGibbs

+0

두 번째 오류가 발생하면 시도해 보았습니까? 메시지 (System.InvalidOperationException : 누락 된 매개 변수 : foo. at ...)? – HCJ

+0

나는 정말로했다 :( – DGibbs