10/10/2018, 09:51

Ai biết về jQuery giúp mình tí

Mình có code đơn giản thế này (sử dụng jQuery)
Code:
function test()
          {
          var code = "";
          $.get("load.php","",function(data)
                        {
                        code = data;
                        }"html");
          //Các hàm sử lý sau khi ajax được load về
          alert(code);
          //......................
          }
Khi hàm test() được gọi thì nó không chờ đến khi dữ liệu ajax được load về thì đã thực hiện các hàm tiếp theo mất rồi
Mình muốn nó chờ đến khi load xong thì mới thực hiện tiếp thì phải làm thế nào bây giờ?
Rất mong các bạn giúp đỡ
Shellingfox viết 12:01 ngày 10/10/2018
Bạn nên sử dụng các sự kiện của ajax.

Cụ thể trường hợp của bạn nên sử dụng cái này:
http://docs.jquery.com/Ajax/ajaxComplete#callback (Và nên dùng $.ajax để có nhiều tùy chọn hơn)

Còn nếu bạn muốn dùng code như trên thì bạn vào link này, mình đã sửa code của bạn rồi đó:
http://jsbin.com/axoxa

Xem mã nguồn: http://jsbin.com/axoxa/edit
rootkit viết 12:05 ngày 10/10/2018
Được gửi bởi Shellingfox
Bạn nên sử dụng các sự kiện của ajax.

Cụ thể trường hợp của bạn nên sử dụng cái này:
http://docs.jquery.com/Ajax/ajaxComplete#callback (Và nên dùng $.ajax để có nhiều tùy chọn hơn)

Còn nếu bạn muốn dùng code như trên thì bạn vào link này, mình đã sửa code của bạn rồi đó:
http://jsbin.com/axoxa

Xem mã nguồn: http://jsbin.com/axoxa/edit
mọi code javascript nên đặt trong hàm sau :
$(function(){

//code javascript jquery
});
Shellingfox viết 11:59 ngày 10/10/2018
:| bạn đã xem cái mã nguồn của mình chưa? Thì mình đã đặt trong đó rồi còn gì nữa .

Thế nào bác chủ topic, làm được chưa?
Mahakaruna viết 11:56 ngày 10/10/2018
Được gửi bởi hoanghai27
Mình có code đơn giản thế này (sử dụng jQuery)
Code:
function test()
          {
          var code = "";
          $.get("load.php","",function(data)
                        {
                        code = data;
                        }"html");
          //Các hàm sử lý sau khi ajax được load về
          alert(code);
          //......................
          }
Khi hàm test() được gọi thì nó không chờ đến khi dữ liệu ajax được load về thì đã thực hiện các hàm tiếp theo mất rồi
Mình muốn nó chờ đến khi load xong thì mới thực hiện tiếp thì phải làm thế nào bây giờ?
Rất mong các bạn giúp đỡ
Theo tôi biết thì hiện tại có vài cách :

1. đơn giản - hiệu quả nhất :

Code:
function test()
{
          var code = "";
          $.get("load.php","",function(data)
          {
                        code = data;
                        //Các hàm sử lý sau khi ajax được load về
                        alert(code);
                        //......................
          },"html");
          
};
2. Dùng cách của bác Shellingfox - ajaxComplete event.
Nhưng lưu ý là nếu trên page đó có nhiều ajax request thì hàm này sẽ bị gọi cho tất cả các request. Phải có cách để tách biệt xử lí các request đó hoặc phải biết bind/unbind event đó hợp lý

3. Dùng timer:
Code:
function wait(c,f)
{
   if (c()) f();
   else window.setTimeout(function (){wait(c,f)},500,false);
};

request_complete = false;
code = "";
function test()
{
          
          $.get("load.php","",function(data)
          {
                        code = data;
                        request_complete = true;
          },"html");

          wait (
                    function () {return request_complete;},
                    function () {
                              //Các hàm sử lý sau khi ajax được load về
                              alert(code);
                              //......................
                    }
          ); 
};
Cách này xếp vào hàng "tà đạo" nhưng có thể vẫn sẽ đc dùng trong 1 số trường hợp đặc biệt ...
hoanghai27 viết 11:59 ngày 10/10/2018
Cảm ơn các bạn đã trợ giúp
Nhưng mình vẫn còn một vấn đề nho nhỏ thế này cần hỏi
Mình muốn viết 1 đoạn code để kiểm tra dữ liệu trong form trước khi submit như sau:
Code:
$(document.FormName).submit(function() {
//load dữ liệu về và sử lý
$.get("load.php","",function(data)
           if (data == "ok")
                {
                return true;
                }
           else
                {
                alert(data);
                return false;
                }
          });
       //Làm thế nào để nó return kết quả trả về của hàm sử lý ajax ở trên bây giờ? (function(data))
      });
Vấn đề nằm ở chỗ nếu có khiến cho các hàm phía dưới chờ hàm $.get() chạy xong rồi mới chạy thì mình cũng không biết phải làm sao để hàm $(document.FormName).submit() nó trả về kết quả theo đoạn dữ liệu được trả về bây giờ
Bmb viết 11:55 ngày 10/10/2018
Nếu chờ cho $.get() chạy xong rồi mới thực hiện các câu lệnh tiếp theo thì còn gì là ajax nữa ?

Bạn làm theo hướng này thử xem:
Tạo một button bình thường thay cho submit button.
Code:
$(function() {
  $('#button_id').click(function() {
    $.get("load.php","",function(data) {
      if (data == "ok") {
        $('#form_id').submit();
      } else {
        alert(data);
      }
    });
  });
})
hoanghai27 viết 11:56 ngày 10/10/2018
Mình không muốn là button bình thường vì đó là form đăng nhập nên hay Enter hơn là nhấn nút nhưng nếu lập trình để khi nhấn Enter để submit thì nó lại rắc rồi khi có nhiều form trong cùng 1 trang
Bài liên quan
0