1

こんにちは、私はjQuery-formを使用してマルチパートフォームを送信しています。

これは私のPHPコードです:

foreach($addedData as $key => $value)
    $result[$key] = $value;

echo json_encode($result);

Javascript:

function showResponse(responseText){
   alert(responseText);
}
$('button').click(function(){
    $("form").ajaxForm({
        success: showResponse,
        clearForm: true,
    dataType: "json",
    contentType: "application/json; charset=utf-8"
    });
});

これで、応答は[オブジェクトオブジェクト]でした。しかし、これらの2行を削除すると、次のようになります。

dataType: "json",
contentType: "application/json; charset=utf-8"

応答は次のようになりました。

{"key1":"val1","key2":"va2","key3":"val3"}

私の質問は次のとおりです。本当にこれらの2行を削除する必要がありますか?responseTextそして、 Jsonを使用して値を取得するにはどうすればよいですか?

4

5 に答える 5

3

を持っていることによって、dataType:"json", ..あなたはあなたが返されたアイテムをオブジェクト(のような)にしたいという要求を伝えています$.parseJSON(responseText);。それがないと、プレーンテキストが表示されます。

オブジェクトを印刷するには、次のようなものが必要になります。

function showResponse(responseObj){
   $.each(responseObj,function(i,v) {
         alert(i+' = '+v);
   });
}
于 2012-07-31T10:54:30.440 に答える
2

指定するdataType: 'json'と、successコールバック関数には、JSON文字列ではなく、JSONが表すオブジェクトが渡されます。jQueryは、responseTextからオブジェクトへの変換を暗黙的に処理するため、自分で行う必要はありませんJSON.parse(responseText)。応答が有効なJSONでない場合、successコールバックは実行されません。AJAXリクエストが正常に返された場合でも。

値を取得するには、responseText他のJavascriptオブジェクトと同じように使用します。ただし、実際の名前を明確にするために、別の名前を付けることもできます。

于 2012-07-31T10:47:35.297 に答える
0

行を削除すると( mime tipeでファイルとしてresponeを使用するため)JavaScriptでstring( )を取得し、削除しない場合は( )を取得するので、ループが必要な場合は削除しないでください。例えば。ちなみに、オブジェクトにアラートを出すときは、JavaScriptでオブジェクトを文字列に変換します(常に)。'{"key1":"val1","key2":"va2","key3":"val3"}'text/textObject{"key1":"val1","key2":"va2","key3":"val3"}'[Object object]'

于 2012-07-31T10:47:01.707 に答える
0

いいえ、しませんが、アラートボックスはJSONオブジェクトを表示できません。代わりにConsole.log(responseText)を実行し、ブラウザーのdevelopertoolsで結果を調べてみてください。[オブジェクトオブジェクト]はオブジェクトリテラルです

于 2012-07-31T10:47:13.957 に答える
0

スクリプトから以下のコードを削除せず、アラートを正しく受け取る以下のコードを追加してください

dataType: "json",
contentType: "application/json; charset=utf-8"

var htmlstr;
for(var i in responsetext)
{
htmlstr += i +"="+responsetext[i]+"\n";
}
alert(htmlstr);
于 2012-07-31T10:55:26.247 に答える