jQueryAJAX-对结果进行分支

jQuery AJAX - branching on result

本文关键字:分支 结果 jQueryAJAX-      更新时间:2023-09-26

我用jQuery设置了第一个AJAX调用,并且运行良好。我需要做的最后一个更改是检查被调用的PHP页面的结果是否有任何数据库错误,并在需要时显示错误。

这是我当前的Javascript:

<script type="text/javascript">
    $(document).ready(function() {
        $("#storeManager").change(function(){
            var storeManager = $("#storeManager").val();
            $.post('editProject.php', { type: 'storeManager', storeManager: storeManager, id: '1E1DDA14-D2C6-4FC8-BA5F-DBCCC7ABAF7F' }, function(data) {
                if (data.error) {
                    $("#storeManagerRow").addClass("danger");
                    $("#ajaxAlert").addClass("alert alert-danger");
                    $("#ajaxAlert").addClass("danger").html(data.text);
                } else { 
                    $("#storeManagerRow").addClass("success");
                    $("#storeManagerRow").removeClass("danger");
                    $("#ajaxAlert").addClass("alert alert-success").html(data.text);
                }
            }).fail(function (xhr) {
                // no data available in this context
                $("#storeManagerRow").addClass("danger");
                $("#ajaxAlert").addClass("alert alert-danger");
                //display AJAX error details
                $("#ajaxAlert").html(xhr.responseText);
            });
         });    
    });
</script>

我让editProject.php页面回显一个json编码的数组,如下所示:

{"error":"true","text":"Error: No Project ID Found (Missing Parameter)"}

错误和以下成功结果:

{"error":"false","text":"Database Updated Successfully"}

目前is从不为if(data.error)分支进行分支,它总是向else分支,并且也不显示文本值。如果我更改:

$("#ajaxAlert").addClass("alert alert-success").html(data.text);

至:

$("#ajaxAlert").addClass("alert alert-success").html(data);

它确实在ajaxAlertdiv中插入了以下内容:

{"error":"true","text":"Error: Edit Record Error Unknown error (8003)"}

我是jQuery和AJAX的新手,我觉得我已经很接近了,但我不明白为什么它没有为错误分支,为什么它没有显示editProject.php脚本中错误或成功结果的文本值?

问题是data.error的值。。。它应该是一个布尔值。。。不是字符串

因此,不是在PHP中分配'true',而是分配布尔值true

尝试以下两件事,

  1. 解析JSON响应data = JSON.parse(data);

  2. if (data.error)替换为if (data.error == "true")

您的data.error属性包含一个非null非空字符串,该字符串的计算结果始终为true。

改为使用:

if (data.error === 'true') {
    // ...
}

或者,将JSON更改为包含布尔文字而不是字符串:

 {"error":true,"text":"Error: No Project ID Found (Missing Parameter)"}

您的JSON有一个字符串文本"error": "false"(这是一个truthy值),而不是布尔文本"error": false(这将是错误的)。