我有一个从我的数据库中删除页面的ajax调用,但我不太确定如何返回成功并使用它:
我的ajax电话看起来像这样:
$('.delete_button').click(function() {
$.ajax({
url: 'delete_page.php',
dataType: 'json',
async: false,
type: 'post',
data: {
page_id: id
},
succes:function() {
alert('something');
if (s.Err == false) {
window.location.reload(true);
}
}, error:function(e){
}
});
});
在我的delete_page.php中,我有这个:
<?php
require 'core/init.php';
$id = $_POST['page_id'];
$page_id = $id[0];
$delete_page = DB::getInstance()->delete('pages', array('id', '=', $page_id));
if ($delete_page) {
$output['Err'] = false;
} else {
$output['Err'] = true;
}
return json_encode($output);
确实删除了该页面,但它没有运行if语句,也没有提醒任何内容。我该如何解决这个问题?
答案 0 :(得分:6)
不要使用return,实际输出数据,使用正确的标题:
//return json_encode($output);
header('Content-Type: application/json');
echo json_encode($output);
答案 1 :(得分:2)
在PHP脚本中,您需要输出数据而不是返回数据:
header('Content-Type: application/json');
echo json_encode($output);
然后在您的javascript文件中,您需要检索数据:
success: function (data) { // It's success not succes, and you need the parameter
alert('something');
if (data.Err == false) {
window.location.reload(true);
}
}
答案 2 :(得分:0)
如果这是整个delete_page.php,则需要echo
输出,而不仅仅是返回。
答案 3 :(得分:0)
这是一种稍微优雅的处理方式。
更新 delete_page.php 脚本,如下所示:
<?php
require 'core/init.php';
$id = $_POST['page_id'];
$page_id = $id[0];
// Init
$output = array(
'IsDeleted' = false,
'LastError' = ''
);
// Delete
try {
$output['IsDeleted'] = DB::getInstance()
->delete('pages', array('id', '=', $page_id));
}
catch (Exception $ex) {
$output['LastError'] = $ex->getMessage();
}
// Finished
echo json_encode($output);
?>
然后像这样更新你的ajax代码:
$.ajax({
url: 'delete_page.php',
dataType: 'json',
async: false,
type: 'post',
data: {
page_id: id
},
dataType: 'json',
succes: function(result) {
if (result.IsDeleted) {
window.location.reload(true);
} else {
alert('Failed to delete. Last error: ' + result.LastError)
}
},
error:function(e) {
}
});