2011-07-14 112 views
3

这是脚本:为什么我得到[对象对象]而不是JSON?

$("#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。你有一个数组:[]。 JSON是一个javascript对象的字符串表示。

你可以使用JSON.stringify方法来生成从现有对象JSON字符串:

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对象的一种方式,但默认情况下不使用。当你将一个对象转换为一个字符串时,你通常会得到一个无用的值,如"[object Object]"

如果要将对象转换为JSON字符串,则需要使用JSON.stringify函数。 (这是包含在新的浏览器,但需要JSON library在旧的。)

在你的情况,你可能想用

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。 –

相关问题