Трабл отладки AJAX - PullRequest
       17

Трабл отладки AJAX

0 голосов
/ 05 июня 2018

У меня много проблем с отладкой AJAX-запроса.Тот же вызов хорошо работает на более старой версии сайта на том же сервере.Это кусок кода, который отправляет данные из Wordpress в Infusionsoft.Я проверил, и это все подключение нормально.Я также установил плагин заголовков CORS, думая, что это может быть проблемой, но, очевидно, нет.С помощью следующего я получаю parseerror:

  var r=confirm("Are you sure you wish to create the '" + profile.title + "' email template?");
    if (r==true) {
        $('#mailout_buttons').hide();
        $('#mailout_progress').show();
        var request = $.ajax({
            type : "post",
            dataType : "jsonp",
            url : ajaxurl,
            data : $.extend(profile, {action: "create_weekly_email"}),
            xhrFields: {
                withCredentials: true
            },
            error: function(XHR, textStatus, errorThrown)
            {       
                alert(textStatus);                                 
            },
            success: function(response) {
                if(response.type == "success") {
                    $('#mailout_buttons').show();
                    $('#mailout_progress').hide();
                    $('#mailout_success').show();
                }
                else {
                    alert("Error with template creation")
                }
            }
        });
        request.done(function(msg){ console.log(msg)});
        request.fail(function(jqXHR, textStatus){ console.log("Request failed: " + textStatus)});

, и если я заменю ошибку на:

            error: function(e)
            {       
                alert(JSON.stringify(e), null, 4);                                 
            },

, я получу:

{"readyState": 4, "responseText": "create {\" type \ ": \" success \ "}", "status": 200, "statusText": "OK"}

Я также пытался опубликовать тексти HTML.Используя html, он говорит мне, что JSON не очень хорошо сформирован, хотя при использовании https://jsonformatter.curiousconcept.com/, он говорит, что это так.Используя текст, он падает на остальное в обратном вызове успеха.

РЕДАКТИРОВАТЬ 1: я опубликовал функцию create_weekly_email ниже.Create_weekly_email вызывает get_weekly_email, в котором есть SQL-запрос.Я жестко запрограммировал в нем пару переменных, которые возвращают результаты как в phpmyadmin, так и в responseText var.Я вижу, что возвращен какой-то искаженный HTML (который создает офисный документ), и длина HTML варьируется.Я не хочу публиковать возвращенные данные здесь, но в этом последнем вызове отсутствуют все закрывающие теги.Иногда возвращаемая строка намного короче, что заставляет меня думать, что может быть какая-то проблема с тайм-аутом?

function create_weekly_email() {

    if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
        header("Location: " . $_SERVER["HTTP_REFERER"]);
        exit;
    }


    $result = ["type" => "error"];
    if($profile = filter_input_array(INPUT_POST, massemail_fields())) {
        if($re = create_weekly_mail_template($profile)) {
            $result = ["type" => "success"];
        }
    }
    wp_send_json($result);
    exit;
}

1 Ответ

0 голосов
/ 05 июня 2018

Попробуйте этот скрипт.

просто замените dataType : "jsonp", на dataType : "json",.

var r=confirm("Are you sure you wish to create the '" + profile.title + "' email template?");
if (r==true) {
    $('#mailout_buttons').hide();
    $('#mailout_progress').show();
    var request = $.ajax({
        type : "post",
        dataType : "json",
        url : ajaxurl,
        data : $.extend(profile, {action: "create_weekly_email"}),
        xhrFields: {
            withCredentials: true
        },
        error: function(XHR, textStatus, errorThrown)
        {       
            alert(textStatus);                                 
        },
        success: function(response) {
            if(response.type == "success") {
                $('#mailout_buttons').show();
                $('#mailout_progress').hide();
                $('#mailout_success').show();
            }
            else {
                alert("Error with template creation")
            }
        }
    });
    request.done(function(msg){ console.log(msg)});
    request.fail(function(jqXHR, textStatus){ console.log("Request failed: " + textStatus)});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...