成功对应的Ajax代码

时间:2015-02-01 15:34:23

标签: php jquery ajax

我有这个代码从数据库做自动完成功能。如果输入不在数据库中,如何显示错误消息呢?

这是我的js代码:

$('#txt_fname').autocomplete({
    source: function( request, response ) {
        $.ajax({
            url : 'under the hood/rehabCreateAjax.php',
            dataType: "json",
            method: 'post',
            data: {
               name_startsWith: request.term,
               type: 'country_table',
               row_num : 1
            },
             success: function( data ) {
                 response( $.map( data, function( item ) {
                    var code = item.split("|");
                    return {
                        label: code[0],
                        value: code[0],
                        data : item
                    }
                }));
            }
        });
    },
    autoFocus: true,            
    minLength: 0,
    select: function( event, ui ) {
        var names = ui.item.data.split("|");                        
        $('#txt_mname').val(names[1]);
        $('#txt_sname').val(names[2]);
        $('#txt_nickname').val(names[3]);
        $('#txt_stuNum').val(names[4]);
    }               
});

这是我的PHP代码:

require_once '../connection/dbConn.php';
if($_POST['type'] == 'country_table'){
    $row_num = $_POST['row_num'];
    $name = $_POST['name_startsWith'];
    $query = "SELECT stu_fname, stu_mname, stu_sname, stu_nickname,     student_id FROM student 
                    where (UPPER(stu_fname) LIKE '".strtoupper($name)."%')      or (UPPER(stu_mname) LIKE '".strtoupper($name)."%') or
                     (UPPER(stu_sname) LIKE '".strtoupper($name)."%') or     (UPPER(stu_nickname) LIKE '".strtoupper($name)."%')";
    $result = mysqli_query($conn, $query);
    $data = array();
    while ($row = mysqli_fetch_assoc($result)) {
        $name =     $row['stu_fname'].'|'.$row['stu_mname'].'|'.$row['stu_sname'].'|'.$row['stu_nick    name'].'|'.$row['student_id'].'|'.$row_num;
        array_push($data, $name);   
    }   
    echo json_encode($data);
}

顺便说一下..我试图把别的东西放进我的PHP代码中......不工作。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您想要响应空结果集,而不是某种服务器错误。如果是这种情况,您应该将其包含在success回调中。只需检查您的客户端代码,如果data数组包含项目并做出相应的响应:

     success: function( data ) {
      if (data.length) {
         response( $.map( data, function( item ) {
                    var code = item.split("|");
                    return {
                        label: code[0],
                        value: code[0],
                        data : item
                    }
                }));
            } else {
                console.log("no results");
            }
       }

@Koogle建议的error回调不是为了这个目的,你绝对不应该从服务器返回404,只有在找不到网址本身时才会使用500。就此而言error,这意味着内部服务器错误)。

JQuery回调表示低级别无法从服务器获取响应,如果请求失败,则会自动由200运行。不应强制通过返回成功请求的错误代码来运行它(error)。您所指的错误是高级,因为它源于您的代码的固有逻辑,而不是出于任何原因而无法执行代码本身的客观失败

因此,您的案例中的标签error取决于您对代码逻辑的理解方式。例如,如果您在表格中过滤结果并且过滤器未返回任何结果,则很难将其视为错误。但是,如果您希望请求始终返回至少一个结果,那么exception可能是合理的,但我相信{{1}}是更准确的术语。

答案 1 :(得分:0)

您可以在PHP脚本中回复HTTP错误消息并按如下方式处理JS中的错误:

  $.ajax({
        url : 'under the hood/rehabCreateAjax.php',
        dataType: "json",
        method: 'post',
        data: {
           name_startsWith: request.term,
           type: 'country_table',
           row_num : 1
        },
         success: function( data ) {
             response( $.map( data, function( item ) {
                var code = item.split("|");
                return {
                    label: code[0],
                    value: code[0],
                    data : item
                }
            }));
           error: function (response) {
                  // Handle error here
                  console.log(response);
           }
        }

PHP应该是这样的:

$query = "SELECT stu_fname, stu_mname, stu_sname, stu_nickname,     student_id FROM student 
                where (UPPER(stu_fname) LIKE '".strtoupper($name)."%')      or (UPPER(stu_mname) LIKE '".strtoupper($name)."%') or
                 (UPPER(stu_sname) LIKE '".strtoupper($name)."%') or     (UPPER(stu_nickname) LIKE '".strtoupper($name)."%')";

$result = mysqli_query($conn, $query);


$data = array();
while ($row = mysqli_fetch_assoc($result)) {
    $name =     $row['stu_fname'].'|'.$row['stu_mname'].'|'.$row['stu_sname'].'|'.$row['stu_nick    name'].'|'.$row['student_id'].'|'.$row_num;
    array_push($data, $name);   
}
// Respond with error
if($data.length() == 0) {
    http_response_code(500);
    echo "No such entry";
    return;
}

echo json_encode($data);