Отправка JSON через AJAX в PHP с использованием jQuery - PullRequest
12 голосов
/ 08 сентября 2010

Я пытаюсь отправить JSON в файл PHP с помощью jQuery AJAX, в основном я пытаюсь получить значения и идентификаторы группы дочерних элементов, а затем назначить их объекту JSON и затем отправить этот объект через Перейдите к файлу PHP, который затем обработает его и введет в базу данных.

Вот мой код,

Javascript / JQuery:

function test(){
    var selects = $('#systems_wrapper').find('.dropDowns');
    var newArray = new Array();

    selects.each(function(){
        var id = $(this).attr('id');
        var val = $(this).val();
        var o = { 'id': id, 'value': val };

        newArray.push(o);
    });

    $.ajax({
            type: "POST",
            url: "qwer.php",
            dataType: 'json',
            data: { json: newArray }
        });

}

PHP:

<?php
    $json = $_POST['json'];
    $person = json_decode($json);

    $file = fopen('test.txt','w+');
    fwrite($file, $person);
    fclose($file);

    echo 'success?';
?>

Он создает файл, но он абсолютно пустой, есть идеи, что бы это могло быть?

Спасибо заранее!

Ответы [ 5 ]

19 голосов
/ 08 сентября 2010

Вы можете попробовать использовать метод JSON.stringify() для автоматического преобразования вашего массива в JSON. Просто передайте вывод из этого.

data:  { json: JSON.stringify(newArray) }

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

2 голосов
/ 02 февраля 2012

Не использовать массив.
используйте простую строку вроде этой:

var o = '[';
selects.each(function(){
    var id = $(this).attr('id');
    var val = $(this).val();
    o += '{ "id": "'+id+'", "value": "'+val+'" },';    
});
o = o.substring(0,o.length-1);
o += ']';

и в ajax просто отправьте строку 'o'

        data: { json: newArray }

в php-файле просто создайте json_decode ($ json, true);
он вернет массив массива, к которому вы можете получить доступ через foreach
если вы хотите увидеть массив, используйте var_dump ($ person);

1 голос
/ 08 сентября 2010

Нет необходимости использовать json_decode, если вы сохраняете его в текстовый файл.jQuery кодирует ваш массив в формате JSON, затем PHP должен просто записать этот формат прямо в текстовый файл.Если вы хотите открыть этот файл и получить доступ к данным удобным для использования способом, прочитайте его содержимое в переменную и, затем, запустите для него json_decode ().

1 голос
/ 08 сентября 2010

Вы должны использовать json_encode(), а не json_decode()!Таким образом, вы получите строку json и сможете ее записать.

1 голос
/ 08 сентября 2010

Вы должны установить contentType на вашем ajax POST.Я бы использовал contentType: "application / json";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...