我正在做一个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 之前......我早该知道的。