передать массив php в массив javascript

Я ищу лучший способ передать массив php в javascript.

Я делаю RPG, и когда они входят в систему, я хотел бы вернуть их сохраненные данные из базы данных и сохранить в массиве на стороне javascript:

Чтобы получить данные, я делаю:

$.getJSON("php/CRUD.php", {"_functionToRun" : ""},
    function (returned_data) {
        game.data.dataArray.push(returned_data.split(" "));
        log("1: " + game.data.dataArray); //output: `1: 120,mymap2` 
        log("2: " + game.data.dataArray[0]); //output: `2: 120,mymap2`
    }
);

PHP:

    $qry = 
        'SELECT * 
        FROM userstats
        WHERE id_user_fk ="' . $_SESSION['userid'] . '"
        LIMIT 1';

    $result = $mysqli->query($qry) or die(mysqli_error($mysqli));

    while ($row = $result->fetch_assoc()) {
        $message =  $row['experience'] . $row['levelname'];
    }   

 echo json_encode($message);

1) Это лучший способ получить набор значений в массив js?

2) Почему я не могу получить доступ к определенному элементу данных game.data.dataArray, используя game.data.dataArray[0].

Они дают тот же результат 1: 120,mymap2

        log("1: " + game.data.dataArray);
        log("2: " + game.data.dataArray[0]);

Должен ли returned_data.split(" ") разбивать возвращаемую строку на два элемента массива?


РЕДАКТИРОВАТЬ: Хорошо, я сделал echo json_encode($message);, и он возвращается с кавычками, но все равно возвращает те же результаты для game.data.dataArray и game.data.dataArray[0]

1: "120,mymap2" 
2: "120,mymap2" 

Я также изменил функцию на $.getJSON


Снова изменился на

    $qry = 
        'SELECT * 
        FROM userstats
        WHERE id_user_fk ="' . $_SESSION['userid'] . '"';

    $result = $mysqli->query($qry) or die(mysqli_error($mysqli));

    while ($row = $result->fetch_assoc()) {
        $array[] =  $row['experience'] . $row['levelname'];
        die(json_encode($array[]));
    }   

и JS это:

$.getJSON("php/CRUD.php", {"_functionToRun" : ""},
    function (returned_data) {
        game.data.dataArray.push(returned_data.split(" "));
        log("1: " + game.data.dataArray);
        log("2: " + game.data.dataArray[0]);
    }
);

Результаты:

Uncaught melonJS: level <br />
<font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-...<omitted>...nd 

person Growler    schedule 26.04.2014    source источник
comment
Вы должны использовать функцию json_encode.   -  person hidden_4003    schedule 26.04.2014
comment
@hidden_4003, пожалуйста, смотрите обновление   -  person Growler    schedule 26.04.2014
comment
Выложенный вами php ничего не выводит, что именно вы повторяете?   -  person jeroen    schedule 26.04.2014
comment
@jeroen, пожалуйста, смотрите выше   -  person Growler    schedule 26.04.2014


Ответы (2)


Если вы используете $.getJSON и предоставляете действительный json, вам не нужно ничего анализировать, поэтому вы можете изменить свой php на:

if ($row = $result->fetch_assoc()) {
    echo json_encode($row);
    exit;    // You're limiting the number of rows to 1, so there is no need to continue
}

И джаваскрипт:

$.getJSON("php/CRUD.php", {"_functionToRun" : ""},
    function (returned_data) {
        // you can push `returned_data` to an array / add it to an object,
        // but then you need to keep track of its index
        log("1: " + returned_data.experience); //output: `1: 120` 
        log("2: " + returned_data.levelname); //output: `2: mymap2`
    }
);
person jeroen    schedule 26.04.2014
comment
Не знал, что вы можете сделать returned_data.experience и получить доступ к свойствам возвращаемых данных. Это потому, что вы возвращаете его как JSON, читаемый объект js? - person Growler; 26.04.2014
comment
@Growler Даже лучше; даже если вы используете обычный метод $.ajax(), jQuery сделает разумное предположение и проанализирует ваш json. Хотя, если вы хотите сделать это правильно, вы используете dataType: 'json' или $.getJSON. Вам просто нужно убедиться, что никакой другой вывод не отправляется обратно, кроме json (например, предупреждения и т. д.). - person jeroen; 26.04.2014

Что вам нужно сделать, это изменить этот код:

while ($row = $result->fetch_assoc()) {
    $message =  $row['experience'] . $row['levelname'];
}

Чтобы сделать это массивом:

while ($row = $result->fetch_assoc()) {
    $message[] =  $row['experience'] . $row['levelname'];
}

Итак, $message теперь становится массивом. Вам нужно вывести это клиенту. Вы можете сделать это, используя:

die(json_encode($message));

Причина в том, что в вашем коде он выводит только последний.

person Praveen Kumar Purushothaman    schedule 26.04.2014
comment
Каков ответ страницы PHP? - person Praveen Kumar Purushothaman; 26.04.2014