无法从ajax接收数据到php变量

时间:2015-03-16 15:32:07

标签: javascript php ajax fullcalendar

我有一个Fullcalendar插件的功能,它应该在mysql bbdd中插入一些由ajax转移到php的数据。

select: function(start, end, allDay) {
            var title = prompt('Evento a insertar:');
            if (title) {
                start = $.fullCalendar.moment(start).format('YYYY-MM-DD hh:mm:ss');
                end = $.fullCalendar.moment(end).format('YYYY-MM-DD hh:mm:ss');

                 $.ajax({
                     url: 'http://localhost/test-fullcalendar/php/add_evento.php',
                     data: {"title": title, "start": start, "end": end},
                     type: "POST",
                     success: function(json) {
                        alert('OK');
                        console.log(title + ' ' + start + ' ' + end);
                     }
                 });
                 calendar.fullCalendar('renderEvent',
                 {
                     title: title,
                     start: start,
                     end: end,
                     allDay: allDay
                 },
                 true
                 );
            }
            calendar.fullCalendar('unselect');
        }

我的php收到它:

$title = $_POST['title'];
$start = $_POST['start'];
$end = $_POST['end'];

当php告诉我变量是"undefined index"时,问题出现了。我尝试放置isset(),但echo没有显示任何内容,因此插入mysql表不能正常运行。

问题是什么?我没有使用Ajax的经验,我认为它与success function有关系,因为我读到没有一种特殊的方法可以从ajax中接收php中的数据,只有经典方法POST ..

由于

4 个答案:

答案 0 :(得分:0)

你的Ajax结构是正确的,我认为问题是你发布到php脚本的数据。尝试在 console.log(title + ' ' + start + ' ' + end);之前使用$.ajax 。可能一个或多个数据不正确。其中一个可能的问题是$.fullCalendar.moment().format()。可能此函数不返回简单的字符串,因此您无法在ajax数据中使用它。尝试使用console.log()进行"开始","结束"和"标题"分开。

答案 1 :(得分:0)

尝试从AJAX调用中传递数据的行中删除双引号,例如

data: {
title: title,
start: start, 
end: end
},

答案 2 :(得分:0)

我认为你只需要调试一下。

导航到您的开发者工具' Network'选项卡,看看你发送了什么

Network tab

如果您发送的所有内容都没问题,那么我们可以继续进行一些修改,以使代码更加清晰。
例如,我们可以从成功回调开始:

select: function(start, end, allDay) {
            var title = prompt('Evento a insertar:');
            if (title) {
                start = $.fullCalendar.moment(start).format('YYYY-MM-DD hh:mm:ss');
                end = $.fullCalendar.moment(end).format('YYYY-MM-DD hh:mm:ss');
                console.log('Sending:', title, start, end);
                 $.ajax({
                     url: 'http://localhost/test-fullcalendar/php/add_evento.php',
                     data: {"title": title, "start": start, "end": end},
                     type: "POST",
                     success: function(json) {
                        var res = JSON.parse(json);
                        if(res.result === 'OK') {
                            alert('OK');
                        }
                        else {
                            console.error(res.message);
                        }

                     }
                 });
                 calendar.fullCalendar('renderEvent',
                 {
                     title: title,
                     start: start,
                     end: end,
                     allDay: allDay
                 },
                 true
                 );
            }
            calendar.fullCalendar('unselect');
        }

现在,在PHP部分:

<?php
//Check existance
if(!isset($_POST['title']) || !isset($_POST['start']) || !isset($_POST['end'])) {
    echo json_encode(array('result'=>'KO','message'=>'Invalid input! '.var_export($_POST, true)));
    exit;
}


//Check emptyness
if(empty($_POST['title']) || empty($_POST['start']) || empty($_POST['end'])) {
    echo json_encode(array('result'=>'KO','message'=>'Empty input! '.var_export($_POST, true)));
    exit;
}

//title, start and end exists in POST and are not empty

try {
//SQL code, insert/update blablabla
}
catch(Exception $e) {
   echo json_encode(array('result'=>'KO','message'=>$e->getMessage()));
   exit;
}
//....

//All went ok
echo json_encode(array('result'=>'OK'));

现在,使用此代码,您将能够知道您的php发生了什么,并在javascript控制台中查看错误。

答案 3 :(得分:0)

我有你的问题的答案,只需将数据中的开始和结束变量更改为start.format()和end.format()