web-dev-qa-db-ja.com

jquery Ajax呼び出し-データパラメーターがMVCコントローラーアクションに渡されていません

JQuery ajax呼び出しからMVCコントローラーメソッドに2つの文字列パラメーターを渡し、json応答が返されることを期待しています。パラメータはクライアント側に入力されていますが、サーバー側の一致するパラメータがnullであることがわかります。

JavaScriptは次のとおりです。

$.ajax({  
  type: "POST",  
  contentType: "application/json; charset=utf-8",  
  url: "List/AddItem",  
  data: "{ ListID: '1', ItemName: 'test' }",  
  dataType: "json",  
  success: function(response) { alert("item added"); },  
  error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); }
});

コントローラのメソッドは次のとおりです。

Function AddItem(ByVal ListID As String, ByVal ItemName As String) As JsonResult
   'code removed for brevity
   'ListID is nothing and ItemName is nothing upon arrival.
   return nothing
End Function

私は何を間違えていますか?

32
Grant

私は試した:

<input id="btnTest" type="button" value="button" />

<script type="text/javascript">
    $(document).ready( function() {
      $('#btnTest').click( function() {
        $.ajax({
          type: "POST", 
          url: "/Login/Test",
          data: { ListID: '1', ItemName: 'test' },
          dataType: "json",
          success: function(response) { alert(response); },
          error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); }
        });
      });
    });
</script>

およびC#:

[HttpPost]
public ActionResult Test(string ListID, string ItemName)
{
    return Content(ListID + " " + ItemName);
}

出来た。 contentTypeを削除し、dataを二重引用符なしで設定します。

32
LukLed

Ajaxのキャッシュに問題がある場合は、オフにすることができます。

$.ajaxSetup({cache: false});
2
Mocksy

追加する必要があります-> contentType: "application/json; charset = utf-8"、

<script type="text/javascript">
    $(document).ready( function() {
      $('#btnTest').click( function() {
        $.ajax({
          type: "POST", 
          url: "/Login/Test",
          data: { ListID: '1', ItemName: 'test' },
          dataType: "json",
          contentType: "application/json; charset=utf-8",
          success: function(response) { alert(response); },
          error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); }
        });
      });
    });
</script>
2
Ahmet Onur
  var json = {"ListID" : "1", "ItemName":"test"};
    $.ajax({
            url: url,
            type: 'POST',        
            data: username, 
            cache:false,
            beforeSend: function(xhr) {  
                xhr.setRequestHeader("Accept", "application/json");  
                xhr.setRequestHeader("Content-Type", "application/json");  
            },       
            success:function(response){
             console.log("Success")
            },
              error : function(xhr, status, error) {
            console.log("error")
            }
);
1
Rakesh Haladi

私の場合、contentTypeを削除すると、Internal Server Errorが発生します。

これは私が複数回試みた後に働いたものです:

_var request =  $.ajax({
    type: 'POST',
    url: '/ControllerName/ActionName' ,
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ projId: 1, userId:1 }), //hard-coded value used for simplicity
    dataType: 'json'
});

request.done(function(msg) {
    alert(msg);
});

request.fail(function (jqXHR, textStatus, errorThrown) {
    alert("Request failed: " + jqXHR.responseStart +"-" + textStatus + "-" + errorThrown);
});
_

そして、これはコントローラーのコードです:

_public JsonResult ActionName(int projId, int userId)
{
    var obj = new ClassName();

    var result = obj.MethodName(projId, userId); // variable used for readability
    return Json(result, JsonRequestBehavior.AllowGet);
}
_

ASP.NETの場合は少し違います。この回答の pdate で説明されているように、JSON.stringify()をデータに適用する必要があります。

0
BiLaL