没有像我想要的那样得到json

时间:2013-07-17 18:29:09

标签: javascript jquery arrays json

我试图以特定的方式发送或检索,不确定故障的位置......

以下是使用JSON.stringify(test)时的外观:

{"1":"<div class=\"test\">test1</div>","2":"<div class=\"test\">test2</div>","1":"<div class=\"test\">test1</div>"}

但是我的ajax / json返回看起来像这样:

["'1':'<div class='test'>test1</div>'","'2':'<div class='test'>test2</div>'","'3':'<div class='test'>test3</div>'"]

我在开头需要大括号,“不要在那里。”

以下是我发送和获取数据的方式。

test.php的

$test = array();

$test[] = array('id' => '1', 'name' => 'test1');
$test[] = array('id' => '2', 'name' => 'test2');
$test[] = array('id' => '3', 'name' => 'test3');

echo json_encode($test);

检索它的javascript:

var mytest = [];

$.getJSON('test.php', function(data){ 

    $.each(data, function (i, val) {
        mytest.push("'"+val.id+"':'<div class='test'>"+val.name+"</div>'");
    });

    alert(JSON.stringify(mytest));

});

真的希望得到帮助......我被困住了。在此先感谢: - )

3 个答案:

答案 0 :(得分:2)

你正在使用一个数组。正如凯文指出的那样,这是行不通的。你需要声明一个期望键值对的对象文字。

var myTest = {}; 

$.each(data, function (i, val) {
  mytest[i] = val;
});

这是一个很好的,更详细的解释。 How can I add a key/value pair to a JavaScript object?

答案 1 :(得分:1)

你最想要的只是一个对象。

var mytest = {};
$.each(data, function (i, val) {
    mytest[val.id] = "<div class='test'>"+val.name+"</div>";
})

注意,我故意将var mytest移动到ajax回调中,因为没有理由在外面定义它(它在回调之外不可用)

答案 2 :(得分:1)

在您的JavaScript代码中,您在结果中创建了一个数组而不是对象...因此,您应该使用[]而不是使用.push,而不是使用{}应直接使用mytest["1"] = whatever分配对象的属性。所以这是修改后的代码形式......

var mytest = {};

$.getJSON('test.php', function(data){ 

    $.each(data, function (i, val) {
        mytest[val.id] = '<div class="test">'+val.name+'</div>';
    });

    alert(JSON.stringify(mytest));

});