簡體   English   中英

無法從ajax接收數據到php變量

[英]Cant receive data to php variables from ajax

我有一個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。

謝謝

您的Ajax結構是正確的,我認為問題是您要發布到php腳本的數據。 嘗試使用console.log(title + ' ' + start + ' ' + end); $.ajax 之前 可能一個或多個數據不正確。 可能的問題之一是$.fullCalendar.moment().format() 此函數可能不會返回簡單的字符串,因此您不能在ajax數據中使用它。 嘗試將console.log()用於“開始”,“結束”和“標題”。

嘗試從AJAX調用中傳遞數據的行中刪除雙引號,如下所示

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

我認為您只需要調試一點。

導航到開發人員工具的“網絡”標簽,然后查看發送的內容

網絡標簽

如果您發送的所有內容都可以,那么我們可以繼續進行一些修改,以使代碼更加與您交流。
例如,我們可以從成功回調開始:

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控制台中查看錯誤。

我有您問題的答案,只需將數據中的start和end變量更改為start.format()和end.format()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM