需要帮助jQuery将数据发布到php文件

时间:2016-03-11 13:35:01

标签: javascript php jquery ajax

所以我要做的是使用完整的日历ajax调用来获取在数据库中注册的事件。 当我尝试这样做时,没有弹出错误,事实上,ajax调用会返回成功添加到数据库。

我分别测试了PDO查询并且它工作正常,所以请帮助我使用ajax帖子,因为这是我将错误列为错误的。

这是default.html中的ajax调用。

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());

    }   
?>

我在控制台日志中看到带有post变量的xhr GET请求。他们只是没有从jQuery转到php。

如何实现这一目标将不胜感激。

JQuery在添加事件后弹出:

PHP错误:未定义的索引(适用于所有变量)

从jQuery设置的变量不会传递给php。

主文件的标头(default.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>

控制台发出以下错误: - POST http://localhost/calendar/add_events.php 500(内部服务器错误)

以下是网络标签中的错误: - http://postimg.org/image/4k9ztzuep/

基于delighted提供的答案,我能够使查询正常工作并解决jQuery错误。

但POST不起作用: - 我这样说是因为我改变了所有字段以允许NULL但是它允许NULL并在数据库中创建NULL,NULL,NULL,NULL条目。

1 个答案:

答案 0 :(得分:2)

根据您的请求图片,您需要在dataType:'text',来电中设置ajax

此外,在您的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);
}

此外,在构建数据字符串时,您应始终对输入进行编码,特别是因为您传递日期和网址

将您的代码更改为:

data: 'title='+ encodeURIComponent(title)+
      '&start='+ encodeURIComponent(start)+
      '&end='+ encodeURIComponent(end)+
      '&url='+ encodeURIComponent(url),

请注意,即使这不能解决您当前的问题,您仍应实施此更改;)