我想通过ajax将一些表单数据保存在数据库中。这个ajax函数将数据发送到我的php脚本:
$('#save_meta').click(function () {
//some code to get and validate my form values
"update_meta": {
"title": new_title,
"des": new_desc,
"tags": tag_string,
"id": id
}
};
$.ajax({
type: "POST",
url: base_url + "/wp-content/plugins/my_plugin/my_save_form_content_script.php",
dataType: "json",
data: data
}).complete(function (jqXHR) {
if (jqXHR.readyState === 4) {
console.log('success');
}
});
});
这是我的php脚本。它是wordpress插件的一部分,所以它使用$ wpdb函数。
require_once('../../../wp-load.php');
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){
if(isset($_POST['update_meta'])){
$title=$_POST['update_meta']['title'];
$des=$_POST['update_meta']['des'];
$tags=$_POST['update_meta']['tags'];
$id=$_POST['update_meta']['id'];
global $wpdb;
$table_name = $wpdb->prefix .'my_database_table';
$sql = "UPDATE $table_name
SET des='$des', title='$title', tags='$tags'
WHERE id=$id";
$wpdb->query($sql);
}
}
到目前为止工作正常。但是当发生错误时没有反馈。因此,例如,如果我将删除PHP变量周围的$ sql字符串中的引号,将发生错误,数据将不会被保存。但是我怎么能把这个错误作为ajax响应传递出去?
答案 0 :(得分:1)
你真的没有。您可以期待某个响应(正确的响应),如果它不是那个。发生了错误。
如果发生非编译错误,大多数框架会将HTTP标头设置为500。所以你可以检查一下。但是,如果发生编译错误,则无效。
当然在生产中你不应该有编译时错误。
答案 1 :(得分:0)
我想我找到了办法:
当wpdb查询成功时,将返回int 0。所以我把这个添加到php脚本中:
if($wpdb->query($sql)==0){
echo "success";
}
我将ajax完整功能更改为:
...}).complete(function (text) {
if ($.trim(text.responseText) == "success") {
alert('success');
}
});
我不得不使用trim,因为响应文本中有空格或换行符或其他内容。但有了它,它就有效了。