2015-04-24 16 views
6

Tôi đang gửi một số thông tin qua AJAX tới PHP-Script để nhận một số văn bản, sẽ được hiển thị. Cho đến nay không có vấn đề gì. Nhưng nếu người dùng đăng xuất, kết quả sẽ là false và một phương thức có biểu mẫu đăng nhập được hiển thị.Lặp lại yêu cầu AJAX sau khi đăng nhập

Nếu người dùng đăng nhập, thông tin đầu tiên (var data) phải gửi thêm một lần nữa vì lần gửi đầu tiên không được chấp nhận.

$.ajax({ 
url: "script.php", type: "POST", data: data, dataType: "json" 
}) 
.done(function(json) { 
    if (json.result === false) { 
     showModal("login"); return; 
    } 
    else { 
     $('#result').html(json.result); 
    } 
}); 

Chức năng ShowModal cũng được kết nối với một yêu cầu ajax, vì vậy người dùng là nhận được đăng nhập ... Sau đó các dữ liệu đầu tiên nên gửi thêm một lần nữa ...

function showModal() { 
    $('body').append('<form>...'); // Show Modal with form to login 
} 

// With submit form, the user will be logged in 
$('body').on('submit','#loginform',function(event){ 
$.ajax({ 
    url: "login.php", 
    type: "POST", 
    data: { 'username': username, 'password': password }, 
    dataType: "json" 
}) 
.done(function(json) { 
    // User is now logged in 
    // Now repeat first request 
}); 
}); 
+0

mã kích hoạt khi người dùng được đăng nhập là gì? – Kyojimaru

+0

kết thúc cuộc gọi ajax trong một chức năng riêng biệt và gọi lại khi các điều kiện không thành công – wahwahwah

+0

Nếu bạn muốn lưu trữ dữ liệu, bạn có thể lưu trữ nó trong một 'cookie' hoặc' localStorage' và sử dụng nó như một tham số cho hàm @ RaphaelMüller được đề xuất – empiric

Trả lời

4

Đặt mã của bạn bên trong một hàm. Bạn có thể gọi một hàm bất cứ khi nào bạn cần nó:

var sendData = function() { 
    $.ajax({ url: "script.php", type: "POST", data: data, dataType: "json" }) 
.done(function(json) { 
     if (json.result === false) { 
      showModal("login"); return; 
     } 
     else { 
      $('#result').html(json.result); 
     } 
    }); 
}; 

// now run sendData() when you want to trigger it 

đâu để gọi sendData() lần thứ hai phụ thuộc vào cách đăng nhập của bạn (ShowModal) hoạt động. Tìm cách để nắm bắt sự kiện 'đăng nhập thành công'.


Bạn có thể vượt qua sendData đến showModal chức năng và gọi nó là ở đó. Bằng cách này showModal không cần phải biết gì về data:

var sendData = function() { 
    $.ajax({ url: "script.php", type: "POST", data: data, dataType: "json" }) 
.done(function(json) { 
     if (json.result === false) { 
      // The function sendData is passed as a parameter - will be called after a successful login 
      showModal("login", sendData); return; 
     } 
     else { 
      $('#result').html(json.result); 
     } 
    }); 
}; 

Sau đó, nơi ShowModal được định nghĩa:

function showModal(dialog, loginCallback) { 
    $('body').append('<form>...'); // Show Modal with form to login 
    // With submit form, the user will be logged in 
    $('#loginform').on('submit', function(event) { 
     $.ajax({ 
      url: "login.php", 
      type: "POST", 
      data: { 'username': username, 'password': password }, 
      dataType: "json" 
     }) 
     .done(function(json) { 
      // User is now logged in 
      // Now repeat first request 
      loginCallback(); 
     }); 
    }); 
} 
+0

Vui lòng xem bài đăng cập nhật. Đây là cách đăng nhập được thực hiện ... – user3142695

+0

Ok, bạn sẽ có thể chạy 'sendData()' bên trong cuộc gọi lại 'done' lần nữa. –

+0

Tôi đã cập nhật bài đăng để hiển thị cách đăng nhập. Hãy suy nghĩ tôi có thể tối ưu hóa ... – user3142695

1

Bạn có thể có chức năng ShowModal để chấp nhận một lập luận như Tùy chọn ajax. Nếu các tùy chọn ajax được định nghĩa chỉ cần gọi chúng là xong.

function showLoginModal(ajaxOptions){ 
    $.ajax({ 
     url: "login.php", 
     type: "POST", 
     data: { 'username': username, 'password': password }, 
     dataType: "json" 
    }) 
    .done(function(json) { 
     if(ajaxOptions!== undefined){ 
      $.ajax(ajaxOptions); 
     } 
    }); 
} 

Sau đó vượt qua ajaxOptions từ chức năng gọi điện thoại của bạn

$.ajax({ 
url: "script.php", type: "POST", data: data, dataType: "json" 
}) 
.done(function(json) { 
    if (json.result === false) { 
     showLoginModal(this); 
    } 
    else { 
     $('#result').html(json.result); 
    } 
}); 
+0

Vì vậy, tôi có thể định nghĩa một hàm mới 'sendData' như được hiển thị bởi Raphael và gọi hàm đó trong' if (ajaxOptions! == undefined) {'. Đúng? – user3142695

+0

Nếu bạn chỉ có một hàm cho biết sendData cần chức năng này thì bạn nên gọi nó ngay bên trong showModal trực tiếp.Nhưng nếu bạn cần điều tương tự trong nhiều hoặc tất cả các cuộc gọi ajax thì sẽ tốt hơn khi chuyển các tùy chọn ajax sang showModal và sử dụng $ .ajax (passesOptions) bên trong điều kiện if. – wonderbell

+0

Ok, tôi đã cập nhật bài đăng. Bởi vì showModal chỉ hiển thị phương thức. Tôi ràng buộc một sự kiện gửi để gửi dữ liệu đăng nhập. Vì vậy, với modalShow() ở giữa quá trình, tôi không biết cách kết nối dữ liệu ... – user3142695

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