所以我要做的是使用一个完整的日历ajax调用来获取数据库中注册的事件。当我尝试这样做时,没有弹出任何错误,事实上,ajax 调用返回数据库的成功添加。
我单独测试了PDO查询,它运行良好,所以请帮助我发布ajax帖子,因为这是我短列出了错误的内容。
这是默认的 ajax 调用.html。
selectable: true,
selectHelper: true,
select: function(start, end, allDay) {
var title = prompt('Event Title:');
var url = prompt('Type Event url, if exits:');
if (title) {
var start = $.fullCalendar.moment(start);
var end = $.fullCalendar.moment(end);
console.log("Event Triggered");
$.ajax({
url: 'add_events.php',
data: 'title='+ title+'&start='+ start +'&end='+ end +'&url='+ url ,
type: "POST",
dataType: 'text',
success: function(json) {
alert('Added Successfully');
},
error: function(xhr, textStatus, errorThrown) {
alert(xhr.responseText);
}
});
calendar.fullCalendar('renderEvent',
{
title: title,
start: start,
end: end,
url:url,
allDay: allDay
},
true // make the event "stick"
);
}
calendar.fullCalendar('unselect');
}
这是add_events.php(请注意,除了它没有收到帖子外,这没有错误。
<?php
// Values received via ajax
$data = $_POST;
$json_array["title"]=json_decode($data["title"], true);
$json_array["start"]=json_decode($data["start"], true);
$json_array["end"]=json_decode($data["end"], true);
$json_array["url"]=json_decode($data["url"], true);
$title =$json_array["title"];
$start =$json_array["start"];
$end = $json_array["end"];
$url = $json_array["url"];
// connection to the database
try {
$bdd = new PDO('mysql:host=localhost;dbname=fullcalendar', '....', '.......');
} catch(Exception $e) {
exit('Unable to connect to database.');
}
$sql = "INSERT INTO "
. "`evenement` "
. "SET "
. "`title` = :title, "
. "`start` = :start, "
. "`end` = :end, "
. "`url` = :url ";
$stmt = $pdo->prepare($sql);
$result = $stmt->execute(array(':title'=>$title, ':start'=>$start, ':end'=>$end, ':url'=>$url));
if (!$result) {
print_r($pdo->errorInfo());
}
?>
我在控制台日志中看到带有后变量的 xhr GET 请求。他们只是没有从jQuery转到php。
如能提供任何援助,将不胜感激。
添加事件后弹出的 JQuery 显示:
PHP 错误:未定义的索引(适用于所有变量)
从jQuery设置的变量不会传递给php。
主文件(默认.html)的标头如下所示:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<link href='css/fullcalendar.css' rel='stylesheet' />
<link href='css/fullcalendar.print.css' rel='stylesheet' media='print' />
<script src='js/moment.min.js'></script>
<!--<script src='js/jquery.min.js'></script>-->
<script src='js/fullcalendar.min.js'></script>
控制台给出以下错误:-开机自检 http://localhost/calendar/add_events.php 500(内部服务器错误)
这是网络选项卡中的错误:-http://postimg.org/image/4k9ztzuep/
根据delighted
提供的答案,我能够使查询正常工作并解决jQuery错误。
但是开机自检不起作用:-我这样说是因为我更改了所有字段以允许 NULL,但它确实允许 NULL 并在数据库中创建一个 NULL、NULL、NULL、NULL 条目。
根据请求的图像,您需要在ajax
调用中设置dataType:'text',
。
此外,在 PHP 中,将 PDO 更改为:
// "?"s here will get replaced with the array elements below
$sql = 'INSERT INTO evenement ( title,start,end,url) VALUES( ?, ?, ?, ? )';
$stmt = $db->prepare($sql);
$stmt->execute(array($title, $start, $end, $url )); // these array elements will replace the above "?"s in this same order
// check for errors
if($stmt->errorCode() == 0) {
$id = $db->lastInsertId(); // get the id form the inserted record, not really needed but I put it here to show you how
}
else {
// had errors
$errors = $stmt->errorInfo();
print_r($errors);
}
此外,在构建数据字符串时,应始终对输入进行编码,尤其是当您传递日期和 URL 时。
将代码更改为:
data: 'title='+ encodeURIComponent(title)+
'&start='+ encodeURIComponent(start)+
'&end='+ encodeURIComponent(end)+
'&url='+ encodeURIComponent(url),