2011-08-21 30 views
5

Tôi có hai cuộc gọi jQuery Ajax mà tôi đang kết hợp trên một trang. Tôi bị kẹt trên success: function() trong mỗi cái, như một là success: function(msg) và cái kia là success: function(data). Tôi không chắc chắn về những gì cả hai có nghĩa là gì, và những gì họ nên có trong mã kết hợp. Tôi sẽ đặt hai cuộc gọi dưới đây, riêng biệt và kết hợp như tôi có chúng cho đến nay.`Thành công: hàm (msg)` có nghĩa là gì trong cuộc gọi jQuery Ajax của tôi?

Ajax Yêu cầu # 1: có một $msg .= "<div class='pagination'><ul>"; trên trang php chức năng này. Không chắc chắn nếu đó là những gì này là đề cập đến.

$.ajax 
({ 
    type: "GET", 
    url: "new_arrivals_data.php", 
    data: "page="+page, 
    success: function(msg) 
    { 
     $("#gallery_container").ajaxComplete(function(event, request, settings) 
     { 
      gallery_show(); 
      loading_hide(); 
      $("#gallery_container").html(msg); 
     }); 
    } 
}); 

Ajax Yêu cầu # 2: Theo như tôi có thể nhìn thấy, không có data bất cứ nơi nào trong hồ sơ php của cuộc gọi này. Không biết những gì function(data) đang đề cập đến.

$.get("new_arrivals_data.php",{imgs: value}, function(data){ 
    $("#gallery_container").html(data); 
}); 

kết hợp Yêu cầu: Tôi đã đặt một ? nơi msg là trong các cuộc gọi ban đầu là tôi không chắc chắn những gì để đặt vào nó ngay tại chỗ.

$.ajax 
({ 
    type: "GET", 
    url: "new_arrivals_data.php", 
    data: {page:page, imgs: value}, 
    success: function(?) 
    { 
     $("#gallery_container").ajaxComplete(function(event, request, settings) 
     { 
      gallery_show(); 
      loading_hide(); 
      $("#gallery_container").html(?); 
     }); 
    } 
}); 

Trả lời

3

msgdata chỉ đơn giản là tên của các thông số chính thức. Bạn sử dụng chúng để tham chiếu đến dữ liệu đáp ứng được truyền cho hàm đó khi nó được gọi.

Bạn có thể đổi tên nó thành bất kỳ số nhận dạng JavaScript hợp lệ nào.

Mặc dù không thực sự bất kỳ lý do gì để gọi ajaxComplete bên trong success: callback:

success: function(whatever_you_want_to_call_it) { 
     gallery_show(); 
     loading_hide(); 
     $("#gallery_container").html(whatever_you_want_to_call_it); 
} 

$.get("new_arrivals_data.php",{imgs: value}, function(i_like_ice_cream){ 
    $("#gallery_container").html(i_like_ice_cream); 
}); 

Hãy nhớ rằng, trong cả hai trường hợp, bạn đang đi qua một chức năng như một đối số. Hàm đó được gọi khi nhận được phản hồi.

Bất kỳ mã nào gọi hàm đó, cũng chuyển trả lời vào hàm đó làm đối số đầu tiên để bạn có quyền truy cập vào nó. Đó là lý do tại sao bạn xác định tham số.

Nó rất giống với việc khai báo một biến trong một hàm.

$.get("new_arrivals_data.php",{imgs: value}, function(){ 

    var i_like_ice_cream = arguments[0]; 
    $("#gallery_container").html(i_like_ice_cream); 

}); 

Điều này gần như giống nhau. Bạn đã liên kết một biến với đối số đầu tiên được chuyển vào hàm gọi lại của bạn.

+0

Vì vậy, bạn đang nói nó có nghĩa đen có thể là bất cứ điều gì? Nó không cần phải làm gì với tệp php? – stefmikhail

+0

@stefmikhail: Bất kỳ tên biến JavaScript hợp lệ nào. Nó không liên quan gì đến PHP. Nó giống như tuyên bố một biến trong hàm của bạn. 'function() {var msg = arguments [0];/* ...*/} 'sẽ có hiệu quả giống nhau. – user113716

1

Nó chỉ là tên cho biến chứa dữ liệu trả lời được trả về từ cuộc gọi ajax. Đặt tên cho nó bất kỳ điều gì có ý nghĩa nhất với ngữ cảnh, để làm cho mã của bạn dễ đọc hơn, ví dụ: html, resp, logged.

2

Nó có thể là bất kỳ tên biến hợp lệ nào. Hoặc là data hoặc msg sẽ hoạt động, miễn là bạn sử dụng cùng một phạm vi trong phạm vi chức năng đó.

Để giải thích, bạn đang đặt success thành một hàm ẩn danh, khá nhiều chỉ là một hàm không có tên. Vì vậy, khi jQuery gửi sự kiện success, nó gọi hàm mà bạn đã cung cấp khi tạo yêu cầu ajax. Nó cũng chuyển một số đối số vào hàm đó (trong trường hợp này, dữ liệu thu được từ yêu cầu ajax). Những gì bạn đang xác định là những gì mà thông tin đến nên được gọi trong phạm vi chức năng mới này.

Lấy mã sau ví dụ:

function workOnBob(aWorker) { 
    aWorker("Bob") 
} 

var sayHi = function(name) { alert("Hello " + name); }; 
var getMarried = function(groom) { alert(groom + " is getting married!"); }; 

workOnBob(sayHi); // "Hello Bob" 
workOnBob(getMarried); // "Bob is getting married!" 

Bạn có thể thấy rằng workOnBob là một chức năng, và nó sẽ được thông qua một chức năng ẩn danh. Nó gọi hàm đó bằng chuỗi "Bob". Ngoài ra, hãy chú ý đến các hàm ẩn danh, sayHigetMarried, đã đặt tên cho các đối số mà chúng nhận được khác nhau trong phạm vi của riêng chúng (lần lượt là namegroom). Cả hai đều nhận được chuỗi "Bob", nhưng cả hai đều chọn gọi nó là một cái gì đó khác nhau.

Chức năng và đóng cửa ẩn danh có thể gây nhầm lẫn, nhưng khi bạn nhận được hang, chúng rất thú vị.

+0

Câu trả lời tuyệt vời! Giờ tôi đã hiểu rõ hơn. Cố gắng tìm hiểu tất cả những thứ này là khó khăn mà không biết bất cứ ai tôi có thể hỏi. Tò mò, cuộc gọi từ phía trên là tất cả trong 'hàm loadData (trang) {}'. Liệu 'trang' đó có ý nghĩa gì đó khác với lời giải thích ở trên không? Sau đó trong mã nó được gọi theo cách sau: 'loadData (1)'. Điều đó có nghĩa là gì? – stefmikhail

+0

Nhân tiện, hãy yêu tên người dùng của bạn! – stefmikhail

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