2012-02-16 30 views
2

コントローラのメソッドを呼び出すためにJquery Ajaxを使用していますが、私はいつも無効なjsonプリミティブエラーが発生しています。jquery-ajaxで無効なjsonプリミティブエラーを取得する

以下はコードです。コントローラで

クライアント側コード

$("#something >li").each(function() { 
        widgetsobj.push({ 
        WidgetId: $(this).attr("dbid"), 
        ColumnNumber: 2, 
        RowNumber: 3, 
        WidgetType: "Graph", 
        WidgetName: "ddd", 
        PageName : "Page1" 
       }); 
      }); 

$.ajax({ 
      url: "/Home/ABC", 
      dataType: "json", 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      data: { pagename1: pagename, widgetsobj1: JSON.stringify(widgetsobj) }, 
      success: function (data) { 
       alert("ss"); 
      }, 
      error: function (data) { 
       debugger; 
      } 
     }); 

[HttpPost, ValidateInput(false)] 
public JsonResult ABC(string pagename1, List<XYZ> widgetsobj1) 
{ 

    // do something 
} 

注XYZは、以下の特性を持つオブジェクトです。

  • widgetIdが

  • ColumnNumberに

  • RowNumber関数

  • WidgetType

  • WidgetName

  • ページ名

私が間違っている場所を教えてください。

+1

Dave Wardはこれに関する長い説明を[http://encosia.com/asmx-scriptservice-mistake-invalid-json-primitive/](http://encosia.com/asmx-scriptservice-mistake -invalid-json-primitive /) – Austin

答えて

0

アヤックスについてのことは、あなたが送ったものについては非常に気難しいということです。すべてが正しい形式であることを絶対に確認する必要があります。それが実行されるよう

あなたはダブルクォーテーション( ")ではなく、単一よりも( ')など。

行うための最善のものを使用している。すなわち、POSTを表示するFirebugのまたは類似のコンソールを使用することですまたはalert()を使用して、POSTデータが送信される前にそれを表示することができます。

json.stringify()を使用すると、それを信じるものに変換します受け入れ可能なJSON文字列です。文字列であるため、任意の時点で構文エラーが発生する可能性があります。

私はここで見ることができるもの、で問題がある可能性がありますから、

data: { pagename1: pagename, widgetsobj1: JSON.stringify(widgetsobj) } 

あなたは試してみたいことがあります。

data: { "pagename1": pagename, "widgetsobj1": JSON.stringify(widgetsobj) } 
+0

ji jack私はすでにこれを試しましたが動作しません。どのように素早く返信してくれてありがとう – Meraj

+0

ここであなたのPOSTデータ文字列を投稿して、エラーを見つけることができますか?ありがとう – JackalopeZero

0

私は同じエラーを得ました。私の解決策は、ajax呼び出しに:

dataType: 'json', 

を追加することでした。あなたはすでにあなたのAjaxコールでそれを持っているように見えます。しかし、これが他の誰かを助けることを願っ

関連する問題