JQuery AJAX запрос отправляется до того, как отправить - PullRequest
1 голос
/ 19 марта 2010

Кто-нибудь имел такой же опыт работы с jQuery AJAX и свойством beforeSend? Любой совет, как решить эту проблему?

Что я делаю, так это чтение из базы данных с помощью вызова AJAX, прежде чем я хочу отправить новые данные в базу данных через AJAX (мне нужно перейти на последнюю страницу всех комментариев). Что происходит, так это то, что beforeSend извлекает данные с данными, которые должны быть отправлены впоследствии. Есть идеи?

$.ajax({
    type: 'POST', 
    url: '_php/ajax.php',
    dataType:"json",
    async:false, 
    data:{
     action    : "addComment",
     comment_author  : comment_author_val, 
     comment_content  : comment_content_val,
     comment_parent_id :  comment_parent_id_val,
     comment_post_id  : "<?=$_REQUEST["ID"]?>"
    },

beforeSend: function() {
    //WHAT A MESS... 
    if (typeof commentOpen == "undefined") {
     $.get("_php/ajax.php", { action: "getComments", commentPage: '', ID: "<?=$_REQUEST["ID"]?>" },
      function(data){
       $('#comments > ul').html(data);
       return true;
      }
     );
    }
},

Ответы [ 3 ]

3 голосов
/ 19 марта 2010

Ваше действие по извлечению данных в beforeSend является асинхронным, то есть $.get() возвращается немедленно, а затем beforeSend возвращается немедленно. Затем $.ajax() продолжает выполнение. На данный момент, вызов $.ajax() уже идет полным ходом и имеет преимущество над вызовом $.get(). Я не уверен, как именно эти два запроса обрабатываются одновременно под прикрытием, но в этом суть.

То, что вы хотите сделать, это $.get() выполнить синхронно , а не асинхронно. Таким образом, beforeSend не вернется, пока поиск данных не завершится. Для этого просто добавьте async: false к вашему параметру $.get().

1 голос
/ 19 марта 2010

Вы пытаетесь сделать слишком много с beforeSend. Вам лучше сначала выполнить ajax-вызов getComments, а затем запустить вызов addComment. Как то так:

if (typeof commentOpen == "undefined") {
    getComments({ commentPage: '', ID: "<?=$_REQUEST["ID"]?>" });
}
function getComments(data){
    data = $.extend({action : "getComments"}, data);
    $.ajax({
        type: 'GET', 
        url: '_php/ajax.php',
        data: data,
        success: function(data){
            $('#comments > ul').html(data);
            addComment({
                comment_author: comment_author_val, 
                comment_content: comment_content_val,
                comment_parent_id: comment_parent_id_val,
                comment_post_id: "<?=$_REQUEST["ID"]?>"
            });
        }
    });
}
function addComment(data) {
    data = $.extend({action : "addComment"}, data);
    $.ajax({
        type: 'POST', 
        url: '_php/ajax.php',
        dataType: "json",
        data: data
    });
}
0 голосов
/ 19 марта 2010

Наконец load () решил проблему ;-)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...