2017-10-22 19 views
2

私はMVCアプリケーションを持っていますが、このAJAXリクエストを動作させることはできません。 [HttpPost]のコードにブレークポイントを入れると、スクリプトはそこにも到達しません。C#MVC AJAXリクエスト

私はJavaScript:

function newEmployee() 
    { 
     $.ajax({ 
      url: '/Personnel/NewEmployee', 
      data: { 
       Ime: "test1", 
       Prezime: "test2" 
      }, 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      success(data) 
      { 
       console.log("Success!"); 
      }, 
      error(data) 
      { 
       console.log(data) 
      } 
     }); 
    } 

マイコントローラー:

public class PersonnelController : Controller 
    { 

     public ActionResult Employees() 
     { 

      //Return View 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult NewEmployee(string Ime, string Prezime) 
     { 
      uint UnijelaOsoba = 2; 
      Zaposlenik zaposlenik = new Zaposlenik(0); 
      zaposlenik.NoviZaposlenik(Ime, Prezime, UnijelaOsoba); 
      return Json(new { success = true }); 
     } 
    } 

これまでのところ、それは私がクローム開発者ツールコンソール用として、私は取得するには、JavaScriptの側で間違えてるように見えます:「POST http://127.0.0.1:8080/Personnel/NewEmployee 500(内部サーバーエラー)」


解決策(Shyjuの回答後):

function newEmployee() 
{ 
    $.ajax({ 
     url: '/Personnel/NewEmployee', 
     data: JSON.stringify({ 
      Ime: "test1", 
      Prezime: "test2" 
     }), 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     success(data) 
     { 
      console.log("Uspješno!"); 
     }, 
     error(data) 
     { 
      console.log(data) 
     } 
    }); 
} 

これは、すべてのサーバーのコードがクラッシュし、

+0

チェック[ネットワーク]タブを動作するはずですし、Farhadの答え@チェック – Dabbas

+0

あなたのブレークポイントを入れてくださいあなたの行動方法で500エラーはあなたのPOST要求がOKであるが、メソッド内でエラーが発生していることを意味します。 – sebu

答えて

4

500エラーが意味:) JSONを文字列化していました。アクションメソッドにブレークポイントを設定して理由を調べる必要があります

500エラーの原因になる可能性があることは、間違った方法でデータを送信していることです。単純なリーンフラットオブジェクトを送信する場合、コンテンツタイプをapplication/jsonとして指定する必要はありません。そうするなら、オブジェクトを文字列化して送信し、サーバー側に必要な変更を加える必要があります。

これは多分それは正しくないのです、それは要求しているもののURLを参照してください。、クロームのdevのツールで

$.ajax({ 
    url: '@Url.Action("NewEmployee","Personnel")', 
    data: { 
     Ime: "test1", 
     Prezime: "test2" 
    }, 
    type: 'POST' 
}).done(function(res) { 
    console.log(res); 
}).fail(function(a, b, c) { 
    console.log(a); 
}); 
+0

あなたは天才です!文字通りに解決する方法を示すために質問を編集します! –

+2

リーンフラットシンプルビューモデルの場合、それを文字列化する必要はありません。これは、ajax呼び出しのcontentTypeヘッダーオプションを削除すると機能します。 – Shyju

+0

contentTypeを削除しても、おかげさまで! –

1

Javascriptを

function newEmployee() 
    { 
    var Data = { 
      Ime: "test1", 
      Prezime: "test2" 
     }; 
     $.ajax(
     { 
      type: "POST", 
      data: Data, 
      dataType: "json", 
      url: '@Url.Action("ActionName","ControllerName")', 
      success: function (data) { 
       console.log("Success!"); 
      }, 
      error: function (xhr, status) { 
        console.log("Error!"); 
      }, 
      complete: function (xhr, status) { 

      } 
     }); 
    } 
+0

成功と完了の違いは何ですか? –

+0

スイッチケースのデフォルトのようなたびに完了します。成功は正常にコントローラから正常に戻るときに機能します。 –

+0

ありがとう、私は今理解しています –

関連する問題