我有一个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 ..
由于
答案 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'选项卡,看看你发送了什么
如果您发送的所有内容都没问题,那么我们可以继续进行一些修改,以使代码更加清晰。
例如,我们可以从成功回调开始:
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()