Аякс не доходит до функции успеха.Всегда ошибка функции.Не удается отправить данные в другой файл - PullRequest
0 голосов
/ 05 декабря 2018

Пожалуйста, будьте терпеливы.Это мой первый пост, насколько я помню.

Это часть моего calendar.js сценария.Я пытаюсь POST данные, которые я получаю из модального окна в index.php до sql.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.php находится в той же папке, что и calendar.js и index.php.

В sql.php Iпопытайтесь получить эти значения с помощью:

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

Я проверил много других вопросов и ответов, и ни одно из них не помогло мне решить мою проблему.Я не вижу орфографических ошибок.Это не не подчиняется правилу same origin policy.Я не хочу использовать функцию jQuery $.post.Кто-нибудь видит очевидное решение?

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Вы должны указать ключ POST для строки данных JSON, которую вы отправляете:

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']);

Кроме того, dataType в функции jQuery.ajax задается как «Тип данных, которые вы ожидаете получить от сервера».согласно jQuery документации .Насколько я могу судить из вашего кода, вы скорее ожидаете чего-то другого в качестве своего ответа, поэтому попробуйте исключить эту строку.

0 голосов
/ 05 декабря 2018

Извините, что обременял вас всех.Это моя третья неделя программирования, поэтому моя нехватка знаний виновата.Я не знал, как работает поток данных между AJAX и PHP в URL-адресе ...

Когда я искал другие ошибки, я печатал или выводил на экран много разных вещей.Файл PHP должен отображать только одну вещь, хотя это может быть массив с несколькими значениями.

Например, например:

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

Я снова извиняюсь.

0 голосов
/ 05 декабря 2018

Вы хотите отправлять массив в post, а не в строку, поэтому отправляйте myData напрямую, чтобы получить значение массива в вашем файле PHP, а не преобразовывать его в строку JSON. Это будет работать с вашим текущим файлом PHP, как вам требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...