2011-07-05 41 views
6

Tôi có đoạn mã PHP sau:Làm thế nào để kích hoạt các "lỗi" callback trong JQuery AJAX cuộc gọi sử dụng trong PHP

if (!($result = mysql_query($query, $link))) { 
    die("Invalid SQL query: " . $query); 
} 

Và tôi có đoạn mã JQuery mã sau:

$.ajax({ 
     url: "....search.php", 
     data: ..., 

     async: false, //to trigger error alert 

     success: function(xml) { 
      ... 
     }, 

     error: function(xml) { 
      foundError = true; 
     }, 

     dataType: "xml" 
    }); 

if(foundError) { 
     setProgress("Could not complete the search because an error was found", ProgressBar.ERROR); 
} 

Is nó có thể có các cuộc gọi chết kích hoạt chức năng gọi lại lỗi JQuery? Nếu không, làm thế nào tôi sẽ kích hoạt nó nếu không?

Trả lời

9

Hãy thử điều này:

if (!($result = mysql_query($query, $link))) { 
    header("HTTP/1.1 404 Not Found"); 
} 

Choose the error appropriate for your application

+0

Tuyệt! Nếu tôi gửi dữ liệu trước khi điều này (ví dụ trước khi mã PHP được đăng, tôi có echo "hello world";) thì điều này sẽ không hoạt động, đúng không? Tự hỏi nếu có những cách khác. – BlackSheep

+0

@BlackSheep, 'header()' các cuộc gọi phải được thực hiện trước khi đầu ra khác (tức là "echo" hello world "'). –

+0

Bạn có thể dễ dàng gọi ob_start() ở đầu trang, ob_end_flush() ở phía dưới và sau đó gọi ob_clean() ngay trước tiêu đề của bạn để xóa bộ đệm đầu ra nếu có bất kỳ thứ gì trong đó. – AlienWebguy

0

Bạn không thể báo hiệu mã phía máy khách từ máy chủ (ít nhất, không theo cách bạn đang mong đợi).

Khi sử dụng AJAX, tốt nhất là sử dụng các mã phản hồi HTTP thích hợp và có hành động jQuery đối với những lỗi trong lỗi: gọi lại.

0

Bạn không thể truy cập vào lỗi ajax như vậy là không có lỗi ajax. Những gì bạn có thể làm, là kiểm tra biến số xml của bạn trong phần thành công; nếu nó bắt đầu với Invalid SQL query bạn biết có lỗi php.

Để dọn dẹp mọi thứ, bạn có thể muốn trả về một số thông tin khác (xml/json) trong trường hợp lỗi thay vì chỉ là một chuỗi.

Các vấn đề liên quan