0

Отправка массива с помощью Ajax в PHP-скрипт

7

У меня есть массив, созданный с помощью функции .push. Этот массив содержит очень большие данные. Как лучше всего передать его в PHP скрипт?

dataString = ???; // массив?
$.ajax({
    type: "POST",
    url: "script.php",
    data: dataString,
    cache: false,
    success: function() {
        alert("OK");
    }
});

script.php:

$data = $_POST['data'];

// здесь я хотел бы использовать foreach:
foreach ($data as $d) {
    echo $d;
}

Как лучше всего это сделать?

3 ответ(ов)

1

Для того чтобы закодировать вашу строку данных в формате JSON, вам нужно сначала создать массив, а затем преобразовать его в JSON-строку с помощью JSON.stringify(). Вот ваш исправленный код:

var dataString = [/* ваши данные в формате массива */];
var jsonString = JSON.stringify(dataString);

$.ajax({
    type: "POST",
    url: "script.php",
    data: { data: jsonString }, 
    cache: false,

    success: function() {
        alert("OK");
    }
});

Важно отметить, что при отправке данных методом POST они должны быть в виде пар ключ-значение. Поэтому ваш текущий вариант data: dataString — неверен. Вместо этого правильно будет использовать:

data: { data: jsonString }

Теперь в вашем PHP-коде:

$data = json_decode(stripslashes($_POST['data']));

// Здесь вы можете использовать foreach:

foreach ($data as $d) {
    echo $d;
}

Этот код корректно декодирует JSON-строку из POST-запроса и выводит каждый элемент массива $data. Убедитесь, что данные, которые вы отправляете через jsonString, корректно сериализованы в JSON, чтобы json_decode в PHP смог их правильно обработать.

0

Ваш код выглядит корректно, но у вас есть некоторые моменты, которые можно улучшить или исправить. Вот перевод вашего кода с небольшими пояснениями:

dataString = [];
$.ajax({
    type: "POST",
    url: "script.php",
    data: { data: $(dataString).serializeArray() },
    cache: false,

    success: function() {
        alert("OK");
    }
});
  1. dataString: Убедитесь, что переменная dataString содержит элементы, которые нужно сериализовать. В текущем виде она инициализирована как пустой массив, что может означать, что вы не передаете никаких данных на сервер.

  2. serializeArray(): Этот метод используется для сериализации элементов формы в массив объектов, который включает в себя имя и значение каждого элемента. Если dataString не является формой или элементами формы, вы не получите ожидаемые данные. Убедитесь, что вы вызываете serializeArray() на правильном элементе.

  3. Обработка ошибок: Рассмотрите возможность добавления функции error в ваш Ajax-запрос, чтобы обработать возможные ошибки:

error: function(jqXHR, textStatus, errorThrown) {
    console.error("Ошибка: " + textStatus, errorThrown);
}

Таким образом, окончательный код может выглядеть так:

dataString = $('#yourFormId'); // Замените #yourFormId на ID вашей формы
$.ajax({
    type: "POST",
    url: "script.php",
    data: { data: dataString.serializeArray() },
    cache: false,

    success: function() {
        alert("OK");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.error("Ошибка: " + textStatus, errorThrown);
    }
});

Не забудьте заменить #yourFormId на соответствующий селектор вашей формы. Это обеспечит корректную сериализацию данных.

0

Если ваша переменная dataString не является строкой, а на самом деле массивом (как вы указываете в вопросе), используйте формат JSON. Это позволит вам удобно передавать и обрабатывать данные.

Вот пример того, как можно использовать JSON для работы с массивами:

$data = json_decode($_POST['data'], true); // Преобразуем JSON-строку в массив
if (is_array($data)) {
    foreach ($data as $d) {
        echo $d;
    }
} else {
    echo "Ошибка: Данные не являются массивом.";
}

В этом коде мы используем json_decode для преобразования JSON-строки в массив. Не забудьте установить параметр true, чтобы получить ассоциативный массив. Если переданные данные не являются массивом, будет выведено сообщение об ошибке.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь