2016-05-26 96 views
-1

私は、Ajaxのポストコールで次の代入を使用してフォームデータを渡しています:modelパラメータがビューに同じタイプのモデルの絆としてフォームデータを解析する文字列化の方法を指示するために使用され無効なJSONプリミティブモデルのエラーを解決するにはどうすればよいですか?

data: {model: JSON.stringify(formData) }, 

しかし、JSONブール値をajaxメソッドに返すと、内部サーバーエラー500からエラーJSON primitive model is invalidが発生します。私はこれもまた、私のsuccess functionがajaxコードで発射されていないと思う。

質問: ブール値を返す際に無効なJSONパラメータエラーを解決する方法を教えてください。

AJAX方法:

var formData = $("createForm").serialize(); 

$.ajax({ 
       type: "POST", 
       url: '@Url.Action("Index", "CreateEscalation")', 
       data: {model: JSON.stringify(formData) }, 
       cache: false, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (json) { 
        if (json.Success) { 
         window.location.href = json.redirectUrl; 
        } 
        else{ 
         $('#submitStatus').text("Error occurred while processing your request, please try again or contact system administrators"); 
         $(this).addClass('alert alert-danger fade in'); 
         $('#submitStatus').show(); 
        } 
       }, 
       error: function (jqXHR, exception) { 


       } 

      }); 

コントローラPOSTメソッド:

[HttpPost] 
    public ActionResult Index(Escalation escalation) 
    { 
     try 
     { 


      bool success = sqlConnection.InsertWebReq(escalation); 


      if (success) 
      { 
       return Json(new 
       { 
        redirectUrl = Url.Action("Index", "EscalationHistory"), 
        Success = true 
       }); 

      } 
      else 
      { 
       return Json(new 
       { 
        Success = false 
       }); 

      } 

     } 
     catch (Exception ex) 
     { 
      return Json(new 
      { 
       Success = false 
      }); 
     } 
    } 
+0

: "アプリケーション/ jsonの;のcharset = UTF-8"、'と 'データを使用:FORMDATAを、'とあなたモデルは正しく結合されます。 –

答えて

-1

I薄いエラーがdata: {model: JSON.stringify(formData) }であることが data: { 'model': JSON.stringify(formData) }

0

開封されたブール値でなければなりません同種ではないすべてのプリミティブが配列またはオブジェクト "ラッパー"内で渡されることを必要とする厳密なJSON仕様ごとに記述されています。多くのJSONシリアライゼーション/デシリアライゼーションライブラリでは、アンラップされたプリミティブのサポートが追加されていますが、サーバーライブラリとクライアントライブラリの両方がこれをサポートしていることがわかっている場合を除き、

私の提案は{"result": false}または{"result": true}

+0

私の場合、包まれたブールの例は何ですか?私はjsonの成功boolを引用符で囲みましたが、構文エラーがありました。 –

+0

@BrianJ例は私の答えに示されたものとまったく同じです。あるいは、配列を折り返したい場合は '[true]'または 'false'です。 JSONがこのプリミティブをサポートしているので、実際のブール値を引用符で囲む必要はありません(そうすることでブール値のプリミティブではなく文字列になります)。 JSON仕様を満たすには、オブジェクトまたは配列コンテキスト内にある必要があります。 –

1

このようなオブジェクトに結果をラップすることです:

var formData = $("createForm").serialize(); 

は、MVCが消費するための有効なJSONを作成しません。 (https://github.com/maxatwork/form2js

抜粋:

なぜ.serializeArray()?

JQueryの.serializeArray()は少し異なっています。それはたとえば、「オブジェクト/ネストされたオブジェクトの配列」にマークアップから、この構造を作る:

[ 
    { "person.friends[0].email" : "[email protected]" }, 
    { "person.friends[0].name" : "Smith Agent" }, 
    { "person.friends[1].email" : "[email protected]" }, 
    { "person.friends[1].name" : "Thomas A. Anderson" } 
] 

第二に、あなたは、二重のエンコードです:

var formData = $("createForm").serialize(); // First encode 

$.ajax({ 
      type: "POST", 
      url: '@Url.Action("Index", "CreateEscalation")', 
      data: {model: JSON.stringify(formData) }, // Encoding Again ? 

だから、JSONだprety多くのゴミであるため、

{ 
    'model' : 'asdf=1&qwer=2' 
} 

または

:それは次のようになります
+0

あなたの言うことですが、.stringify()の代わりにserializeArray()を使用すると、エラーを解決できますか? –

0

contentType: "application/json; charset=utf-8",のような余分なパラメータを削除してダブルコード化しないと、上記のErikのように問題が解決しました。

次のAjaxメソッドの定義は、最後の仕上げに私の仕事: `のcontentTypeを削除

   $.ajax({ 
         url: "@(Url.Action("Index", "CreateEscalation"))", 
         type: 'POST', 
        traditional: true, 
        data: $("#createForm").serialize(), 
        dataType: "json", 
        success: function (result) { 
         //todo: use result 
         if (result.Success) { 
          window.location.href = result.redirectUrl; 
         } 
         else { 
          $('#submitStatus').text("Error occurred while processing your request, please try again or contact system administrators"); 
          $(this).addClass('alert alert-danger fade in'); 
          $('#submitStatus').show(); 

         } 
        } 
       }); 
関連する問題