2016-08-19 22 views
17

Tôi mới để jQuery và sử dụng một ít hướng dẫn cũ trên node.js có sử dụng đoạn mã này:.

$(function() {  
    var roomId; 

    $.ajax({ 
     type: "GET", 
     url: "/api/rooms" 
    }).success(function (rooms) { 
     roomId = rooms[0].id; 
     getMessages(); 
     $.each(rooms, function (key, room) { 
      var a = '<a href="#" data-room-id="' + room.id + '" class="room list-group-item">' + room.name + '</a>'; 
      $("#rooms").append(a); 
     }); 

    }); 

    [...]  

}); 

Tuy nhiên tôi có được điều này lỗi

Uncaught TypeError: $.ajax(...).success is not a function

tại }).success(function (rooms) {

tôi đang tự hỏi những gì có thể sai ở đây?

+0

Bạn đang tìm kiếm cho 'thực hiện()'. http://api.jquery.com/deferred.done/ –

+1

Phải. Tôi đã thay thế tất cả 'success' bằng' done' và lỗi đã biến mất. Cảm ơn vì tiền hỗ trợ! – Karlom

Trả lời

23

Các cuộc gọi đến ajax nên hình như:

$.ajax({ 
    type: "GET", 
    url: "/api/rooms", 
    success: function (rooms) { 

    } 
}); 

Bạn không chuỗi phương pháp chức năng thành công, nó là một trong những mục trong lập luận từ điển.

+1

Bạn có thể chuỗi cuộc gọi hàm thành công, nhưng bạn cần sử dụng .done() được hiển thị trong ví dụ @ https://jsfiddle.net/f7h8heb5/, nhưng bạn cũng thêm tùy chọn thành công trong cuộc gọi ajax như ví dụ của bạn hiển thị dưới dạng cũng – MugiwaraUK

+2

Phải, Trong jQuery 1.8 trên đối tượng jqXHR (được trả về bởi $.ajax) thành công đang được thay thế bằng thực hiện, lỗi với thất bại và hoàn thành với luôn luôn. http://stackoverflow.com/a/8847853/5774375 – Karlom

15

Mã của bạn là chính xác không có vấn đề với nó

nhưng bạn có thể bao gồm các thư viện jquery mới mà không cho phép phương pháp

.success() cho phiên bản mới hơn của việc sử dụng jquery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

<script> 
    $.ajax({ 
     type: "GET", 
     url: "/api/rooms", 
     success: function (rooms) { 

     } 
    }); 
</script> 

và nếu bạn đang sử dụng jquery cũ phương pháp .success() sẽ chạy mà không có bất kỳ vấn đề

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 

<script> 
    $.ajax({ 

     url: "/api/rooms", 
     method: "GET", 
     data: {'datavar': datavalue} 

    }).success(function (rooms) { 

     console.log("successfully run ajax request..." + rooms); 

    }).done(function() { 

     console.log("I am from done function"); 

    }).fail(function() { 

     console.log("I am from fail function."); 

    }).always(function() { 

     console.log("I am from always function"); 

    }); 
</script> 
3

Theo documentation

The jqXHR.success() , jqXHR.error() , and jqXHR.complete() callback methods are removed as of jQuery 3.0.

You can use jqXHR.done() , jqXHR.fail() , and jqXHR.always() instead.


Những phương pháp này ban đầu được thêm vào jQuery $.ajax như các tùy chọn callbacks, được sử dụng như thế này

$.ajax({ 
    url  : 'mypage.php', 
    success : function() { ... }, 
    error : function() { ... }, 
    complete : function() { ... } 
}); 

Tuy nhiên, do một số nhầm lẫn giữa các người dùng, họ sau đó cũng đi kèm với các phương pháp có dây chuyền có cùng tên

$.ajax().success( function() { ... }) 
     .error( function() { ... }) 
     .complete(function() { ... }) 

Những phương pháp này đã không còn được dùng kể từ jQuery 1.8 và được loại bỏ hoàn toàn trong jQuery 3.0, do sử dụng các đối tượng Trì hoãn và sau đó hứa hẹn.

Các jqXHR.success(), jqXHR.error(), và jqXHR.complete() được superseeded bởi thể kết nối jqXHR.done(), jqXHR.fail(), và jqXHR.always() phương pháp, các tùy chọn callbacks vẫn có sẵn cho bây giờ.

Tính đến jQuery 3.0, jQuery thu nhập hoãn lại đối tượng are also Promise/A+ compliant, có nghĩa là họ đang "thenable", và có thể được sử dụng với then() cũng

$.ajax("/status").then(function(data) { 

}).catch(function(error) { 

}); 
Các vấn đề liên quan