PHP json 响应不起作用


PHP json response not working

我正在做一个ajax更新。 我只是想要成功或失败的回应,这样我就知道如何在前端处理一些事情。 问题是它不起作用。 所有这些都是全新的。

$('.delete-template-popup .confirm').on('click', function() {
    var templateName = $('.loaded-template-name').html();
    var templateArray = {};
    templateArray.templateName = templateName;
    var JSONObject = [templateArray];
    var templateJson = JSON.stringify(JSONObject);
    $.ajax({
        url: 'http://localhost/ds-layouts/public/delete-template.php',
        type: 'post',
        data: {"templatePHP" : templateJson},
        success: function(data) {
            console.log(data)
            if (data.status == "success") {
                console.log(1)
            }
            // if (data.status == "success") {
            //  closePopup($('.delete-template-popup'));
            //  window.location.replace("http:////localhost/ds-layouts/public/manage-layouts.php");
            // } else {
            //  $('.delete-template-popup .error').show().html('An error occurred processing your request.  Please try again.  If this error persists contact blah.');
            // }                        
        }
    });
});

和 PHP

if ($flag) {
        //mysqli_commit($connection);
        if ($debug) {
            echo "pass";
            echo "'r'n";
        }
        //$_SESSION["message"] = "Template delete was successful.";
        //header('Content-Type: application/json');
        header('Content-Type: application/json; charset=UTF8');
        echo json_encode(array('status' => 'success'));
    } else {
        if ($debug) {
            echo "fail";
            echo "'r'n";
        }
        //mysqli_rollback($connection);
        // header('Content-Type: application/json');
        // echo json_encode(array('status' => 'failure'));
    }

所以这笔交易是我正在进入 php 语句的 if 块。 如果我有块的标题部分,我会正确传递所有 echo 语句,我可以在 Chromes 开发者控制台中读取它们。 当我取消注释标题语句的那一刻,没有任何效果。 这适用于$flag情况之一 真或假。

我在另一个领域有相同类型的脚本,它工作绝对正常。 不要介意评论。 我只是在注释东西,以找出事情在哪里破裂。 这就是我确定标题导致它的方式。

也许将

dataType: "json",添加到 AJAX 请求对象会有所帮助?

试试这个php

header('Content-Type: application/json'); //must be FIRST output. 
if ($flag) {
    //mysqli_commit($connection);
    if ($debug) {
        echo json_encode(array('debug' => 'pass'));
    }
    else
    {
        echo json_encode(array('status' => 'success'));
    }
} else {
    if ($debug) {
       echo json_encode(array('debug' => 'fail'));
    }
    else
    {
       //mysqli_rollback($connection);
       echo json_encode(array('status' => 'failure'));
    }
}

我已经更改了调试块以返回 json,因为打开调试无论如何都会破坏 ajax。

由于答案是作为评论发布的,因此我无法将答案标记为固定。 我将把这个答案标记为解决问题的方法:

"标头必须在回显之前 – user4035"

谢谢 user4035 让我知道标头在任何回声之前,也就是在服务器的任何打印形式的 html 之前......我早该知道的。