删除JSON对象上的“对象”键

时间:2015-05-04 21:44:17

标签: php ajax json


我正在进行建议选择(使用selectize.js并使用示例customization.html而不使用主题更换器)并且我在尝试将数据库连接到此选择时遇到问题

我需要在select.options中使用像这样的格式来使我的选择工作:

[{id:'1',title:'test',url:'testurl'}
 {id:'2',title:'test2',url:'testurl2'}
 ...
]

使用PHP请求,我创建一个看起来像这样的JSON对象但是当我在JS中收到它时,“对象”键无处不在并且毁了我的JSON。
我的PHP请求(使用PDO)非常简单:

    $result='[';
    $query = $bdd->prepare("SELECT id, login, name, surname FROM users WHERE id!=:id");
    $query->execute(array( ':id' => $_SESSION["id"]));
    while($row = $query->fetch())
    {
        $id = $row[0];
        $login = $row[1];
        $name = $row[2];
        $surname = $row[3];
        if($first != 1) 
            $result .= ','; 
        else
            $first =0;
        $result.='{"id":"'.$id.'",
                    "titre":"'.$login.'",
                    "url":"'.$name.' '.$surname.'"}'; 
    }
    $result.=']';
    return $result;

最后,这是我在JS脚本上获取它的方式:

ajaxCall("getPeople",null/*datas*/,false/*asynchronous*/,function(result){

                var newvalue = [];
                for(var root in result["result"])
                   newvalue.push(result["result"][root]);

                console.log(newvalue);

                return newvalue;
            });

在控制台日志中,我收到了这个JSON,其中每个项目前都有“对象”键,而且这些键不适用于选择:

[Object { id="2",  titre="test",  url=" "}, Object { id="7",  titre="test2",  url=" "}, Object { id="8",  titre="test3",  url=" "}]

那么您是否有任何关于删除这些键或修改我的JSON对象的想法,以便他可以使用选择性选项格式?
谢谢!!

2 个答案:

答案 0 :(得分:1)

不要自己构建JSON代码。使用json_encode

$result = array();
$query = $bdd->prepare("SELECT id, login, name, surname FROM users WHERE id!=:id");
$query->execute(array( ':id' => $_SESSION["id"]));
while($row = $query->fetch(PDO::FETCH_NUM)) {
    $result[] = array(
        'id'    => $row[0],
        // Are you sure it's spelled "titre"? You wrote 'title' elsewhere.
        'titre' => $row[1],
        'url'   => "{$row[2]} {$row[3]}",
    );
);

// Output to browser
Header("Content-Type: application/json;charset=UTF-8");
die(json_encode($result));

我认为您可以直接使用上述数据:

ajaxCall(
    "getPeople",
    null/*datas*/,
    false/*asynchronous*/,
    function(result) {
        console.log(result);
        // Debugging, the Viking way.
        prompt("I got this and no mistake", JSON.stringify(result));
        return result;
    });

与selectize()

一起使用

您发布的示例应该像这样工作。在获得数据之前,您无法运行选择,所以您可以:

$.get('/path/to/getpeople.php', function(result) {
    // If we're here, the call succeeded
    $('#select-links').selectize({
        ...
        options: result, <-- here it goes!
        render: ...
    });
 });

JSON会起作用;请务必发送JSON的Content-Header,并验证字段是&#39; id&#39;,&#39; title&#39;和&#39; url&#39;。

实际上你可以随处更换&#39; url&#39;使用&#39;全名&#39;如果你想;显然,selectize只在渲染函数中使用该字段。

答案 1 :(得分:1)

我测试了你的PHP脚本,似乎返回了有效的JSON。例如:

[
    {
        "id": "1",
        "titre": "login",
        "url": "name username"
    },
    {
        "id": "2",
        "titre": "login",
        "url": "name username"
    },
    {
        "id": "3",
        "titre": "login",
        "url": "name username"
    }
]

在JavaScript中,请尝试以下操作:

ajaxCall("getPeople",null/*datas*/,false/*asynchronous*/,function(result){
    console.log(result);
    return result;
});

JavaScript应自动将result转换为&#34; JSON&#34;对象