Javascript Создать JSON Hash Array для JQuery AJAX - PullRequest
7 голосов
/ 18 февраля 2011

Я отчаянно пытаюсь вручную создать массив JSON-стиля в Javascript для отправки по сети с помощью метода jJuery AJAX.

var fieldsobj = {fields:[]}
$(".fact_field", fact).each(function(index, field){
    var index  = $(field).attr("data-index");
    var name  = $(".fact_field_label", field).text().trim();
    var value  = $(".fact_field_value", field).text().trim();
    fieldsobj["fields"].push({index:index, name:name, value:value});
});
//...
$.ajax({
    type: 'PUT',
    url: url,
    data: fieldsobj,
    success: function(data){...
    },
    complete: function(){...
    }
});

Я хочу следующее:

{fields => [{index:0, name:1, value:2},{...},{...}]}

Что я получаю, это:

 {"fields"=>{"0"=>{...}, "1"=>{..}, "2"=>{...}, "3"=>{...}}

Что я делаю не так?

Ответы [ 2 ]

8 голосов
/ 18 февраля 2011

Когда вы передаете объект как свойство data, jQuery передает его в виде параметров формы в кодировке URL (например, foo=bar&moo=too) в теле. Я думаю, что вы хотите, чтобы передать JSON через тело.

Возьмите json2.js , написанное дядей Крокфордом и используйте JSON.stringify (эта библиотека обеспечивает функциональность для браузеров, которые все еще не поддерживают ее):

$.ajax({
    type: 'PUT',
    url: url,
    data: JSON.stringify(fieldsobj),
    contentType: "application/json",
    success: function(data){...
    },
    complete: function(){...
    }
});

И не забудьте установить свойство contentType! На стороне PHP вы можете использовать json_decode для декодирования необработанного содержимого тела:

$fieldsobj = json_decode(@file_get_contents('php://input'));
0 голосов
/ 21 сентября 2011

Может быть, это помогает.

<ul>
    <li id="p1" data-age="40">John</li>
    <li id="p2" data-age="28">Jack</li>
    <li id="p3" data-age="50">Nash</li>
</ul>

<script>
var a = [];
$("li").each(function(i){
    var o = {};
    o.id = $(this).attr("id");
    o.age = $(this).attr("data-age");
    o.name = $(this).text();
    a.push(o);
});
console.log(a);
//var a = [{id:"p1",age:40, name:"John"},{id:"p2",age:28, name:"Jack"},{id:"p3",age:50, name:"Nash"}];
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...