2013-04-22 18 views
6

Tôi đang tìm một ví dụ đơn giản và/hoặc giải thích cách sử dụng tham số error cho .ajax.Cách sử dụng tham số lỗi jquery ajax

Câu hỏi này (jQuery ajax error function) trỏ đến tài liệu jQuery này (http://api.jquery.com/jQuery.ajax/) mà tôi không hiểu.

Tôi có mã sau không hoạt động và tôi không thể hiểu tại sao. Tôi hy vọng các tham số lỗi sẽ giúp:

jquery:

<script> 
    // wait for the DOM to be loaded 
    $(document).ready(function() { 
     // bind 'myForm' and provide a simple callback function 
     $("#myForm").submit(function(){ 
       var user_input = $("#signup_id_email").val(); 
       $.ajax 
       ({ 
         type: "POST", 
         url: "ajax_test.php", 
         dataType: 'json', 
         data: {email: user_input}, 
         **error: ""** 
       }) 
       .done(function(r) 
       { 
        $("#answer_id").append(r.email); 
       }); 
      }); 
    }); 
</script> 

PHP (ajax_text.php)

<?php 
echo json_encode($_POST); 
?> 
+0

Hi, bạn thậm chí có một yêu cầu POST đi ra ngoài để máy chủ? –

+0

Nếu bạn quen thuộc với Công cụ dành cho Chrome Dev, hãy kiểm tra trong tab Mạng để đảm bảo bạn nhận được phản hồi từ yêu cầu của mình – adamb

Trả lời

12

Các lỗi "tài sản" của các đối tượng tham số $ .ajax được sử dụng để cung cấp một hàm gọi lại được gọi là đóng cửa cho phương thức $ .ajax. Nói cách khác, bạn cần cung cấp một hàm ẩn danh để xử lý lỗi nếu xảy ra lỗi trong yêu cầu ajax. Đây là một ví dụ cơ bản.

$.ajax({ 
     type: "POST", 
     url: "ajax_test.php", 
     dataType: 'application/json', 
     data: {email: user_input}, 
     success: function(result) { 
       // You can use success instead of .done 
     }, 
     error: function(requestObject, error, errorThrown) { 
      alert(error); 
      alert(errorThrown); 
     } 
    }); 

Hãy nhớ rằng chức năng gọi lại lỗi sẽ chỉ được gọi nếu yêu cầu thực sự bị lỗi. Nếu mã của bạn chỉ đơn giản là không trả lại bất cứ điều gì nhưng yêu cầu vẫn trả về trạng thái là 200, bạn sẽ phải xử lý ngoại lệ đó trong hàm gọi lại thành công.

Hy vọng điều này sẽ hữu ích.

EDIT: lưu ý rằng tôi đã xóa việc sử dụng các sự kiện chuỗi và giờ đây tất cả các chức năng gọi lại được xử lý bên trong đối tượng thông số ban đầu được chuyển vào $ .ajax.

2

Tôi nghi ngờ bạn thậm chí còn đang gửi yêu cầu. Khoảng trắng của bạn bị tắt.

Javascript không yêu cầu dấu chấm phẩy ở cuối câu lệnh. Bởi vì điều này, đôi khi nó infers họ, nơi bạn không muốn họ.

Hãy thử đặt '({' trên cùng một dòng với '$ .ajax'. Bạn không thấy lỗi vì không có. $ .ajax là một câu lệnh hợp lệ, mặc dù nó có không có gì. Tương tự như vậy, đối tượng mà bạn tạo bên trong dấu ngoặc đơn là một đối tượng có giá trị, mặc dù nó không có gì là tốt.

$.ajax({ 
    type: "POST", 
    ... 
}).done(function(r) { 
    .... 
}); 

Để trả lời câu hỏi ban đầu của bạn, lỗi mất một chức năng như một tham số. chức năng này mất 3 thông số theo thứ tự này:

  1. XHR (yêu cầu)
  2. tình trạng của yêu cầu
  3. lỗi mà bị ném (có thể không xác định)

Một ví dụ trông như thế này:

$.ajax({ 
    ... 
    error: function(xhr, status, error) { 
     alert("oh no!"); 
    } 
})