jQuery.ajaxから返されたPOSTアクションを使用してJSONを解釈するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/612515

  •  03-07-2019
  •  | 
  •  

質問

次のjQueryコードがあります:

$.ajax({
    type: "POST",
    url: "Services/MyService.asmx/Select",
    dataType: "json",
    data: "{'data':'test'}",
    contentType: "application/json; charset=utf-8",
    success: function(msg){ 
                alert(msg); 
             },
    error: function(xhr){ alert(xhr.statusText);}                
});

メソッドの呼び出しは次を返します:

"{"FirstName":"James"}"

値を取得すると、アラートは完全なJSON文字列を返します。 alert(msg.FirstName)を実行しようとすると、" undefined"と表示されます。

getJSON()メソッドを使用した多くの例を見てきました。ただし、POST動詞にそれを使用する方法は見ていません。誰も私が間違っている正しい方向に私を向けることができますか? jqueryのドキュメントに基づいて、戻り値は同じdataType(json)である必要があるため、何が欠けているのかわかりません。

編集: 私は自分のサービスを調べましたが、文字列を返すメソッドシグネチャの観点から見た一致する例です。応答タイプがapplication / jsonであることも確認しました。

EDIT2: 応答を更新して、外部引用符を含めました。また、カスタムJavaScriptConverterを使用してJSONシリアル化を行っています。カスタムコンバーターは、オブジェクトプロパティ(この場合はFirstName)を取得し、その値をASP.Net AJAX Extensions v1.0が簡単にシリアル化できる辞書コレクションにロードします。

EDIT3: eval()で発生した問題( Expect&quot ;; quot; エラーの原因)を見ると、jsonプロパティ名も引用符で囲まれていることがわかりました。プロパティ値(値ではなく)から引用符を削除すると、eval()が再び機能しました。今、この問題のサーバー側を調べています。

役に立ちましたか?

解決

jQueryの .ajax の使用法は安定しているように見えます。返されたデータをどのように確認していますか? Firebug?フィドラー? .asmx Webサービスは {" FirstName":" James"} のようなデータを返さないためです。応答は次のようになります。

{"d":{"FirstName":"James"}}

http:をご覧ください。 //encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/

success コールバックについては、次を試してください:

function(res) { alert(res.d.FirstName) }

編集:ASP.Net AJAXのv1.0の更新およびコメントを見た:

応答をシリアル化することでv1.0がどのように機能するかはわかりませんが、WebServiceメソッドで独自のカスタムJSONシリアル化を実行している場合、応答はJSONでシリアル化されている可能性があります 。したがって、2回シリアル化しています。

使用しているすべてのコンポーネントが本来の動作をしていると思います。サーバーで手動でシリアル化するため、 success コールバックは手動で非シリアル化する必要があります。

function(res) {
    res = eval('(' + res + ')');
    alert(res.FirstName);
}

他のヒント

IIRCで文字列を評価でき、結果はjsonオブジェクトになります。

myJSON = eval(jsonString);

2番目のパラメーターとしてJSONオブジェクトを使用して投稿変数を定義できます。

例:

$.getJSON("service.py",
    { foo: bar },
    function(data) {
        $.each(data, function() { // blah });
    }
);

編集:どういう意味かわかりました。サービスは" something / json"を返しますか? MIMEタイプとして? Firebugの応答ヘッダーを見ると、次のようになります。

Content-Type    application/json; charset=utf-8

次のようなものを試してください:

 result = eval('(' + result.d + ')');

System.Web.Extensions でシリアル化されたASMXサービスでは、 $ getJSON を使用できません。 $。ajax()を使用して正しく呼び出しを行っています。

Firebugを使用して成功ハンドラー内にブレークポイントを設定し、 msg 値を検査しましたか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top