Преобразуйте js Array () в объект JSon для использования с JQuery .ajax - PullRequest
28 голосов
/ 03 апреля 2009

в моем приложении мне нужно отправить объект массива javascript в php скрипт через ajax post. Примерно так:

var saveData = Array();
saveData["a"] = 2;
saveData["c"] = 1;
alert(saveData);
$.ajax({
    type: "POST",
    url: "salvaPreventivo.php",
    data:saveData,
    async:true
    });

Индексы массива - это строки, а не int, поэтому по этой причине что-то вроде saveData.join ('&') не работает.

Идеи

Заранее спасибо

Ответы [ 5 ]

63 голосов
/ 03 апреля 2009

Не делайте его массивом, если он не массив, сделайте его объектом:

var saveData = {};
saveData.a = 2;
saveData.c = 1;

// equivalent to...
var saveData = {a: 2, c: 1}

// equivalent to....
var saveData = {};
saveData['a'] = 2;
saveData['c'] = 1;

Делать это так, как вы делаете это с массивами, - это просто использовать преимущества обработки массивов в Javascript и не совсем правильный способ сделать это.

7 голосов
/ 11 августа 2011

Если массив уже определен, вы можете создать объект json, просматривая элементы массива, которые затем можете публиковать на сервере, но если вы создаете массив, как в случае выше, просто создайте json объект вместо этого предлагается как Паоло Бергантино

    var saveData = Array();
    saveData["a"] = 2;
    saveData["c"] = 1;

    //creating a json object
    var jObject={};
    for(i in saveData)
    {
        jObject[i] = saveData[i];
    }

    //Stringify this object and send it to the server

    jObject= YAHOO.lang.JSON.stringify(jObject);
    $.ajax({
            type:'post',
           cache:false,
             url:"salvaPreventivo.php",
            data:{jObject:  jObject}
    });

    // reading the data at the server
    <?php
    $data = json_decode($_POST['jObject'], true);
    print_r($data);
    ?>

    //for jObject= YAHOO.lang.JSON.stringify(jObject); to work,
    //include the follwing files

    //<!-- Dependencies -->
    //<script src="http://yui.yahooapis.com/2.9.0/build/yahoo/yahoo-min.js"></script>

    //<!-- Source file -->
    //<script src="http://yui.yahooapis.com/2.9.0/build/json/json-min.js"></script>

Надеюсь, это поможет

4 голосов
/ 03 апреля 2009

Вы можете перебирать пары ключ / значение объекта saveData для построения массива пар, а затем использовать объединение ("&") в результирующем массиве:

var a = [];
for (key in saveData) {
    a.push(key+"="+saveData[key]);
}
var serialized = a.join("&") // a=2&c=1
1 голос
/ 10 сентября 2013

Существует различие между объектом массива и объектом JSON. Вместо создания объекта массива и его преобразования в объект json (с помощью JSON.stringify (arr)) вы можете сделать это:

var sels = //Here is your array of SELECTs
var json = { };

for(var i = 0, l = sels.length; i < l; i++) {
  json[sels[i].id] = sels[i].value;
}

Нет необходимости конвертировать его в JSON, потому что это уже объект json. Для просмотра тоже используйте json.toSource();

0 голосов
/ 10 ноября 2011

При использовании данных на сервере ваши персонажи могут достигать с добавлением слешей, например if string = {"hello"} приходит как строка = {\ "привет \"} Чтобы решить следующую функцию можно использовать позже, чтобы использовать JSON декодирование.

<?php
function stripslashes_deep($value)
{
    $value = is_array($value) ?
                array_map('stripslashes_deep', $value) :
                stripslashes($value);

    return $value;
}

$array = $_POST['jObject'];
$array = stripslashes_deep($array);

$data = json_decode($array, true);
print_r($data);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...