【问题标题】:Ajax call, response processing issueAjax 调用、响应处理问题
【发布时间】:2020-04-04 11:06:31
【问题描述】:

我有一个简单的表单,它通过 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();
    }
});

目前,post.php 仅包含此用于测试目的:

<?php
echo 'go';
?>

但无论 post.php 返回什么内容,它总是显示#errorNewData 内容。

if (msg === 'go') 永远不会为真,即使答案是 go。

但是 alert(msg) 显示 'go',而 #errorNewData 也显示 'go'

【问题讨论】:

    标签: jquery ajax forms


    【解决方案1】:

    msg 可能是 "go\n""go\r\n" 不完全是 "go",因为在结束 ?&gt; 标记之后可能有一个换行符。 (注意:PHP guidance 将其关闭。)所以这个检查应该有效:

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

    ...或者如果您删除?&gt; 标签,您之前的检查可能会开始工作。

    这是我几乎总是回复 ajax 调用 JSON 的原因之一;前导和尾随空格对其没有影响。我可能有:

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

    然后在 JavaScript 中:

    if (msg.success) {
    

    (jQuery 会看到内容类型并自动为您解析 JSON。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多