Ajax вызов, проблема с обработкой ответа - PullRequest
1 голос
/ 04 апреля 2020

У меня есть эта простая форма, которая публикует контент с помощью вызова Ajax.

<form id="NewDataForm">
    <label>Name</label>
    <input type="text" id="name" name="name" value="" required />
    <button id="saveNewData" type="submit" class="btn btn-primary">Save</button>
    <div id="errorNewData" class="alert alert-danger text-center" role="alert"></div>
</form>

Jquery код:

$('#saveNewData').on('click', function(e){
    e.preventDefault();
    $('#errorNewData').hide();
    if ($('#NewDataForm')[0].checkValidity()) {
        $.ajax({
           url: '/admin/includes/post.php',
           type: 'POST',
           data: $('form#NewDataForm').serialize()
        })
        .done(function(msg) {
           alert(msg);
           if (msg === 'go') {
              // some actions
           }else{
              $('#errorNewData').show();
              $('#errorNewData').html(msg);
           }
        });
    } else {
        $('#NewDataForm')[0].reportValidity();
    }
});

В настоящее время сообщение. php просто содержит это для целей тестирования:

<?php
echo 'go';
?>

Но независимо от содержимого, возвращаемого по почте. php, он всегда показывает содержимое #errorNewData.

if (msg === 'go ') никогда не соответствует истине, даже если ответ go.

Однако в сообщении (msg) отображается' go ', а в #errorNewData также отображается' go '

1 Ответ

4 голосов
/ 04 апреля 2020

msg скорее всего "go\n" или "go\r\n" не совсем "go", потому что после закрывающего тега ?>, вероятно, есть новая строка. (Примечание: PHP, руководство - это отключить.) Так что эта проверка должна работать:

if (msg.trim() === "go")

... или если вы удалите тег ?>, ваш предыдущий проверка может начать работать.

Это одна из причин, по которой я почти всегда отвечаю на ajax звонки JSON; ведущие и конечные пробелы не влияют на это. Я бы, наверное, имел:

<?php
header("Content-Type: application/json");
echo json_encode(Array("success" => True));

, а затем в JavaScript:

if (msg.success) {

(jQuery увидит тип контента и автоматически проанализирует JSON для вас .)

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