如何过滤ajax响应中的php错误?

时间:2014-11-18 13:53:29

标签: php jquery ajax response

我想通过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响应传递出去?

2 个答案:

答案 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,因为响应文本中有空格或换行符或其他内容。但有了它,它就有效了。