Сериализация Jquery не работает - PullRequest
0 голосов
/ 12 апреля 2010

Имеют простую форму (здесь извлекаются только поля), но по какой-то причине JQserilization не работает; отлично выглядит в alert (), но только первое поле формы получает сообщения. Предложения, пожалуйста - заранее спасибо

Форма:

<form id="neweventform" method="post" action="">
<div class="grid_4 alpha">Setup date *</div>
<div class="grid_7 omega">
<select name="setup_day" id="setup_day"><?php days_list(); ?></select>
<select name="setup_month" id="setup_month"><?php month_list(); ?></select>
<select name="setup_year" id="setup_year"><?php year_list(); ?></select> 
<div class="grid_11">
<input type="submit" name="createevent" value="Create" id="createevent" />
</div>
</form>

Jquery

$j(document).ready(function(){
$j('#neweventform').live('submit',function () {
var data= $j('#neweventform').serialize();
alert(data);
$j.ajax({type: "POST", url: "scripts/process.php",data: "newevent=newevent&event_options=" + data, cache: false, complete: function(data){ 
$j('#neweventform').fadeOut(2000),loading.fadeOut('slow'),$j('#content').fadeIn(2000), $j('#content').load('scripts/events.php #eventslist'); 
}
});
return false;
});
});

И обработка PHP

if(isset($_POST['newevent'])) :
$insert = mysql_query("INSERT INTO events (event_options) VALUES ('".$_POST['event_options']."')");
endif;

Есть предложения?

Ответы [ 5 ]

1 голос
/ 12 апреля 2010

Посмотрите, как работает serialize(). Он создает строку, которая в вашем случае должна выглядеть следующим образом:

"setup_day=foo&setup_month=bar&setup_year=baz"

Затем вы объединяете эту строку с другой (как данные), что приводит к неверной строке параметра:

data: "newevent=newevent&event_options=" + data

// gets
"newevent=newevent&event_options=setup_day=foo&setup_month=bar&setup_year=baz"

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

Javascript:

data: "newevent=newevent&" + data

PHP (дезинфицировать пользовательский ввод!):

if(isset($_POST['newevent'])) :
    $date = $_POST['setup_year']. '-' . $_POST['setup_month'] . '-' . $_POST['setup_day'];
    $insert = mysql_query("INSERT INTO events (event_options) VALUES ('". $date . "')");
endif;
0 голосов
/ 12 апреля 2010

ОК, попробовал смесь, но в итоге получил это на работу:

$j(document).ready(function(){
    $j('#neweventform').live('submit',function () {
        var optdata= $j('#neweventform').serialize();
        $j.ajax({
            type: "POST", 
            url: "scripts/process.php",
        data: "newevent=" + $j('#neweventform').serialize(),
        cache: false, 
            complete: function(data) { 
                $j('#neweventform').fadeOut(2000),
            loading.fadeOut('slow'),
            $j('#content').fadeIn(2000), 
            $j('#content').load('scripts/events.php #eventslist'); 
            }
        });
        return false;
   });

});

тогда в PHP

if(isset($_POST['newevent'])) :
    $tryit  = serialize($_POST);
    $insert = mysql_query("INSERT INTO events (event_options) VALUES ('".$tryit."')");
endif;
0 голосов
/ 12 апреля 2010

Ваши данные будут преобразованы в нечто вроде этого:

setup_day=1&setup_month=2&setup_year=2010

Затем вы строите свои данные так:

newevent=newevent&event_options=setup_day=1&setup_month=2&setup_year=2010

Эта строка запроса неверна (два '=' без '&') и, вероятно, это корень вашей проблемы.

0 голосов
/ 12 апреля 2010

Попробуйте это:

$j.ajax({
    type: "POST", 
    url: "scripts/process.php",
    data: { newevent: newevent, event_options: $j('#neweventform').serialize() },
    cache: false, 
    complete: function(data) { 
        ...
    }
});
0 голосов
/ 12 апреля 2010

первый. Попробуйте сделать простой

<?php

print_r($_POST);

?>

чтобы увидеть, что вы получаете на почту var.

Во-вторых. Переименуйте ваш параметр

var data

к чему-то более "эксклюзивному"

В данный момент я не помню, если у вас может возникнуть конфликт с символом «данные», используемым для вызова, но по крайней мере вы можете начать отладку отсюда.

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