2011-07-14 7 views
3

これはスクリプトです:JSONの代わりに[object Object]を取得するのはなぜですか?

$("#some_button").click(function() { 

    var changed = []; 

    $('input[id$="_1"]').each(function() { 

     var new_id = this.id.replace('_1', '_0'); 

     if ($(this).val() !== $('input#' + new_id).val()) { 

      changed.push({id:new_id, new_val:$('input#' + new_id).val(), old_val:$(this).val()}); 

     } 

    }); 

    alert(changed); 

}); 

、それは私に[object Object],[object Object]を与えるのです。

私は間違っていますか?

答えて

5

であなたのalertラインを交換したいです。配列は[]です。 JSONは、JavaScriptオブジェクトの文字列表現です。

あなたは、既存のオブジェクトからJSON文字列を生成するJSON.stringifyメソッドを使用することができます。

alert(JSON.stringify(changed)); 

JSON.stringify方法は、現代のブラウザでネイティブですが、あなたは、従来のブラウザをサポートする必要がある場合は、あなたがにjson2.jsを含める必要があります。あなたのページ。このスクリプトは、ブラウザがネイティブにJSON.stringifyをサポートしているかどうかをチェックし、それを使用するかどうかをチェックします。

+0

これはIE7で動作しますか? IE8ではうまくいきます。 – nami

+0

@nami、いいえ、ここから 'json2.js'をインクルードする必要があります:http://www.json.org/js.html。 'JSON.stringify'メソッドは現代のブラウザーにはネイティブですが、従来のブラウザーはそれをサポートしていません。 –

2

JSONはJavaScriptオブジェクトを表示/エンコードする方法の1つですが、デフォルトでは使用されていません。オブジェクトを文字列に変換すると、通常は"[object Object]"のような無駄な値が得られます。

オブジェクトをJSON文字列に変換する場合は、JSON.stringify関数を使用する必要があります。 (これは、新しいブラウザに含まれていますが、古いものでJSON libraryが必要です。)

あなたの場合、あなたはおそらく、あなたはJSONを持っていないので

alert(JSON.stringify(changed)); 
+0

jQueryにはjson.stringifierが組み込まれていますか? – nami

+1

@namiいいえ、そうではありません。 jQuery開発者は、json.orgのライブラリ[json2.js](https://raw.github.com/douglascrockford/JSON-js/master/json2.js)を使用することをお勧めします。 –

+1

@nami私の知る限りではありません。より新しいブラウザや古いブラウザで動作するライブラリの場合は、[JSON-js](https://github.com/douglascrockford/JSON-js)のjson2.jsを試してみてください。 –

関連する問題