2010-05-10 41 views
8

Tôi muốn thực hiện cuộc gọi ajax ngay khi tài liệu được tải. Những gì tôi đang làm là tải một chuỗi chứa dữ liệu mà tôi sẽ sử dụng cho một tính năng tự động hoàn tất. Đây là những gì tôi đã làm, nhưng nó không gọi servlet.Cách thực hiện cuộc gọi AJAX ngay lập tức trên tài liệu đang tải

Tôi đã xóa các cuộc gọi đến các tập lệnh JS khác nhau để làm cho nó rõ ràng hơn. Tôi đã thực hiện một số lời gọi AJAX tương tự trong mã của mình nhưng thường được kích hoạt bởi sự kiện nhấp, tôi không chắc cú pháp để thực hiện ngay khi tải tài liệu, nhưng tôi nghĩ điều này sẽ là (nhưng không phải):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<script src="../js/jquery.js" type="text/javascript"> 
</script> 
<link rel="stylesheet" href="../css/styles.css" type="text/css"> 
<link rel="stylesheet" href="../css/jquery.autocomplete.css" type="text/css"> 
<script type="text/javascript" src="../js/jquery.bgiframe.min.js"> 
</script> 
<script type="text/javascript" src="../js/jquery.dimensions.js"> 
</script> 
<script type="text/javascript" src="../js/jquery.autocomplete.js"> 
</script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 

      $.ajax({ 
       type: "GET", 
       url: "AutoComplete", 
       dataType: 'json', 
       data: queryString, 
       success: function(data) { 
         var dataArray = data; 
         alert(dataArray); 
         } 
       }); 

    $("#example").autocomplete(dataArray); 
    }); 
</script> 
<title></title> 
</head> 
<body> 
    API Reference: 
<form><input id="example"> (try "C" or "E")</form> 
</body> 
</html> 

EDIT: mã của tôi bây giờ trông giống như Karim:

$(document).ready(function(){ 
    $.ajax({ 
     type: "GET", 
     url: "../AutoComplete", 
     success: function(data) { 
      $("#example").autocomplete(data); 
     } 
    }); 
}); 

Tuy nhiên autocomplete vẫn không hoạt động (phải thừa nhận là một câu hỏi hoàn toàn, vì vậy tôi cũng sẽ gửi một câu hỏi khác để nó có thích hợp chức vụ).

Biến "dữ liệu" của tôi đang được gửi lại trông giống như ... "Bản thảo | Văn bản | Đối tượng thông tin | Bóng rổ | Bóng | Thiết bị thể thao | Tarantula" .split ("|");

Nếu tôi làm

var dataArray = "Manuscript|Text|Information Object|Basketball|Ball|Sporting Equipment|Tarantula".split("|"); 

và sau đó

$("#example").autocomplete(dataArray); 

Tất cả đều hoạt động tốt, nhưng khi tôi nhận được giá trị của dataArray từ máy chủ nó không.

+0

Tôi đã đặt các thẻ

1

Chỉ cần sử dụng

$(function() { 
    // Your code here 
}); 

Cũng đảm bảo rằng câu trả lời thực sự là một JSON. Nếu servlet đưa ra lỗi, nó sẽ không được xử lý đúng trong trường hợp của bạn. Sử dụng firebug để xem nếu servlet được gọi và phản ứng là gì. Hoặc đăng nhập tối thiểu trên serverside.

+0

$ (tài liệu) .ready (function() {}); và $ (hàm() {}); là điều tương tự. Nếu anh ta muốn chạy mã khi trang đã tải xong và không khi DOM tải xong, anh ấy cần sử dụng $ (tài liệu) .load – Greg

3

Bạn đang gặp phải sự cố đó vì lệnh gọi $ .ajax thực hiện không trả lại trước khi tự động hoàn thành được khởi tạo, do bản chất không đồng bộ của XHR. Yêu cầu được gửi, luồng thực thi vào biểu thức tiếp theo trước dataArray đã được lấp đầy trong cuộc gọi lại success. Hãy thử điều này:

$(document).ready(function(){ 
     $.ajax({ 
      type: "GET", 
      url: "AutoComplete", 
      dataType: 'json', 
      data: queryString, 
      success: function(data) { 
       var dataArray = data; 
       alert(dataArray); 
       $("#example").autocomplete(dataArray); 
      } 
     }); 
}); 

Điều đó sẽ đảm bảo rằng tính năng tự động hoàn thành của bạn chỉ được khởi tạo khi nhận được phản hồi từ máy chủ.

+0

Cảm ơn tôi đã thử một cái gì đó tương tự nhưng nó vẫn không hoạt động, tôi đã hỏi một câu hỏi khác tại http://stackoverflow.com/questions/2803589/jquery-autocomplete-works-with-a-local-string-but-not-when-the-same-string-is-cal giải thích vấn đề chính xác hơn. – Ankur

0

Bạn có thể sử dụng các công cụ dành cho nhà phát triển Trình duyệt Google Chrome để xem máy chủ của bạn đang quay trở lại. Để truy cập pres Ctrl + Shift + I và trong giao diện công cụ của nhà phát triển, hãy kiểm tra tab mạng để xem có bất kỳ lỗi nào có thể xảy ra hoặc dữ liệu sai đến hay không.

+0

Đây phải là một bình luận. – Ren

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