Ajax无法实现成功功能。始终错误功能。无法将数据发布到另一个文件

时间:2018-12-05 07:17:54

标签: javascript php jquery ajax post

请耐心等待。据我所记得,这是我的第一篇文章。

这是我的calendar.js脚本的一部分。我正在尝试将我从POST的模式窗口中获取的数据index.phpsql.php

function saveModal() { /*JQuery*/
    var current_date_range = $(".modal-select#daterange").val();
    var current_room_number = $("#mod-current-room-number").val();
    var current_room_state = $("#mod-current-room-state").val();
    var myData = {"post_date_range": current_date_range, "post_room_number": current_room_number, "post_room_state": current_room_state};
    var myJSON = JSON.stringify(myData);

    $.ajax({
        type: "POST",
        url: "sql.php",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: true,
        data: myJSON,
        beforeSend: function() {
            $("#ajax").html("<div class='loading'><img src='/images/loader.gif' alt='Loading...' /></div>");
        },
        success: function(result){
            $("#ajax").empty();
            $("#ajax").html(result);
            $("#ajax").fadeIn("slow");
            window.location.reload(true);
        },
        error: function(){
            alert(myJSON);
            $("#ajax").html("<p class='error'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>Oops!</strong> Try that again in a few moments.</p>");
        }
    })    
}

我得到的数据很好(如您所见,我已经用error: function()签入了alert(myJSON);。看起来像这样:{"post_date_range":"12/19/2018 - 12/28/2018","post_room_number":"118","post_room_state":"3"}。没关系,daterangepicker.js以丑陋的MM/DD/YYYY格式返回日期,我非常想将其更改为YYYY-MM-DD。真正的问题是,代码永远不会到达success: function()

现在,我的sql.phpcalendar.jsindex.php位于同一文件夹中。

sql.php中,我尝试使用以下方法检索这些值:

$currentDateRange = $_REQUEST['post_date_range'];
$currentRoomNumber = intval($_REQUEST['post_room_number']);
$currentRoomState = intval($_REQUEST['post_room_state']);

我检查了许多其他SO问答,但没有一个能帮助我解决问题。我没有看到任何拼写错误。这并非违反same origin policy规则。我不想使用jQuery $.post函数。有人看到明显的解决方案了吗?

3 个答案:

答案 0 :(得分:2)

您想发送数组而不是字符串,因此直接发送myData来获取PHP文件中的数组值,而不是转换为JSON字符串。它将根据需要与当前PHP文件一起使用。

答案 1 :(得分:1)

您应为要发送的JSON数据字符串指定POST密钥:

var myJSON = JSON.stringify(myData);
(...)
$.ajax({
    (...)
    data: 'data=' + myJSON,

您需要在您的PHP文件中解析(解码)此字符串,以使其能够再次用作数组/对象:

$data = json_decode($_REQUEST['data']);
$currentDateRange = $data['post_date_range'];
$currentRoomNumber = intval($data['post_room_number']);
$currentRoomState = intval($data['post_room_state']);

此外,jQuery.ajax函数中的dataType被指定为“期望从服务器返回的数据类型”。根据{{​​3}}。据我从您的代码中得知,您可能希望您得到其他答复,因此请尝试排除此行。

答案 2 :(得分:0)

很抱歉给你们加了重担。这是我的第三周编程,所以我缺乏知识是有错的。 我不知道URL中AJAXPHP之间的数据流如何工作...

当我搜索其他错误时,我打印或回显了许多不同的内容。 PHP文件应仅回显1件事,尽管它可以是具有多个值的数组。

例如:

$return_arr = array("sql"=>$sql1, "result"=>$result, "out"=>$out);
echo json_encode($return_arr);

我再次道歉。