Сериализирующие массивы в Ajax для php - PullRequest
1 голос
/ 25 марта 2012

Я пытаюсь сериализовать свои элементы-флажки.

Сначала я хочу сказать вам, что я хочу.

У меня есть такая форма,

enter image description here

Пользователь выбирает чекбоксы, и когда нажимает кнопку «Sil», он должен удалить исполнителя.

Я готовлю для этого сценарий ajax,

function deleteData2()
{
    var artistIds = new Array();

    $(".p16 input:checked").serialize()(function(){
        artistIds.push($(this).attr('id'));
    });


    $.post('/json/crewonly/deleteDataAjax2', { 'artistIds': artistIds },function(response){
        if(response=='ok')
            alert("ok");
    });


}

Мой сценарий ajaxимеет идентификатор фильма и идентификатор исполнителя, он имеет эти данные.Проблема в том, что ajax не может отправить эти данные в php.Я провел некоторое исследование по этому поводу, а затем понял, что мне нужно сериализовать мой массив и добавить сериализовать мой скрипт $(".p16 input:checked").serialize()(function(){, но он также не работает.

public function deleteDataAjax2() {

        extract($_POST);

        if (isset($artistIds))
            $this->sendJSONResponse('ok');

    }

Код выше - мой php.и artistIds всегда пуст, поэтому моя функция сериализации не работает.

Что может быть не так?Как я могу достичь своих ArtistIds на стороне php?

РЕДАКТИРОВАТЬ

наконец, я пришел к этому

  var artistIds = new Array();

    $(".p16 input:checked").each()(function(){
        artistIds.push($(this).attr('id'));
    });


    $.post('/json/crewonly/deleteDataAjax2', JSON.stringify({ 'artistIds': artistIds }),function(response){
    if(response=='ok')
        alert("ok");
    });

и на стороне php,

public function deleteDataAjax2() {

         extract($_POST);

         $a = json_decode($artistIds);

        if (!empty($a))
            $this->sendJSONResponse('ok');

    }

это все ещенеправильно

Ответы [ 2 ]

2 голосов
/ 25 марта 2012
$(".p16 input:checked").serialize()(function(){
    artistIds.push($(this).attr('id'));
});

это все еще дает вам массив артистов, поэтому вы не можете отправить его на сервер, вам нужно сначала преобразовать его в формат JSON, затем вы можете отправить его на сервер, как это

$.post('/json/crewonly/deleteDataAjax2', JSON.stringify({ 'artistIds': artistIds }),function(response){
    if(response=='ok')
        alert("ok");
});

и убедитесь, что декодировали эти данные json на сервере, прежде чем использовать их с помощью функции json_decode

1 голос
/ 25 марта 2012
$(".p16 input:checked").serialize()(function(){
artistIds.push($(this).attr('id'));
});

Я думаю, что эти строки не работают, так как я попробовал их в Chrome, и они дают мне ошибку.Я думаю, что вы можете использовать each функцию jQuery для выполнения чего-то вроде:

$(".p16 input:checked").each(function(){
   artistIds.push($(this).attr('id'));
});
 $.post('/json/crewonly/deleteDataAjax2', { 'artistIds': artistIds },...

После этого вы будете иметь $artistIds в качестве массива PHP.

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

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