Быстрые AJAX-запросы с jQuery приводят к SyntaxError - PullRequest
1 голос
/ 19 марта 2012

У меня есть несколько запросов ajax, связанных с несколькими элементами на моей странице - когда пользователь нажимает «Присоединить» или «Отсоединить», он отправляет запрос ajax, чтобы инициировать указанный запрос.

Если пользователь щелкает каждый элемент сразу за другим до того, как будет получен ответ AJAX предыдущего клика, для запросов после первого будет получена следующая ошибка:

Uncaught SyntaxError: Unexpected token d

При осмотре это происходит в следующих случаях:

Uncaught SyntaxError: Unexpected token d
  $.ajax.success                            addassets.js:217
  f.Callbacks.n                             jquery.js:2
  f.Callbacks.o.fireWith                    jquery.js:2
  w                                         jquery.js:4
  f.support.ajax.f.ajaxTransport.send.d     jquery.js:4

Кто-нибудь видел эту ошибку / удалось найти обходной путь?

UPDATE:

Я перезапустил код, и похоже, что он отменяет ответы на все запросы, КРОМЕ последнего отправленного. Поэтому, если пользователь нажимает 1, 2, 3 - ошибки будут получены для 1 и 2, а ответ для 3 будет получен, как и ожидалось.

Вот мой код Ajax:

    $.ajax({
        url: '/editor/disconnectattachment',
        cache: false,
        data: datastring,
        type: 'POST',
        success: function( data ) {
            console.log( 'received disconnect' );
            var newData = JSON.parse( data );

            if ( newData.Message.code != 200 ) {

                var newbutton = '<input type="button" value="Detach File" class="classic detach-attachment" docid="' + docid + '" rel="' + relid + '" />';
                $scope.empty().html(newbutton).find('input').uniform();;

            } else {

                var newbutton = '<input type="button" value="Attach File" class="attach-attachment" docid="' + docid + '" rel="' + relid + '" />';
                $scope.empty().html(newbutton).find('input').uniform();;

            }

        }
    });

});

1 Ответ

2 голосов
/ 19 марта 2012

Если разрешено несколько асинхронных запросов, и вам нужно дождаться успешного ответа на все из них, попробуйте обернуть их в автоматически выполняемую функцию:

    function abc(param1, param2)
    {

(function(param1,param2){
    $.ajax({
            url: '/editor/disconnectattachment',
            cache: false,
            data: datastring,
            type: 'POST',
            success: function( data ) {
                console.log( 'received disconnect' );
                var newData = JSON.parse( data );

                if ( newData.Message.code != 200 ) {

                    var newbutton = '<input type="button" value="Detach File" class="classic detach-attachment" docid="' + docid + '" rel="' + relid + '" />';
                    $scope.empty().html(newbutton).find('input').uniform();;

                } else {

                    var newbutton = '<input type="button" value="Attach File" class="attach-attachment" docid="' + docid + '" rel="' + relid + '" />';
                    $scope.empty().html(newbutton).find('input').uniform();;

                }

            }
        });


    }
}(param1,param2);

Приведенный выше код не является решением,но по крайней мере это позволит вам получить несколько успешных ответов на несколько вызовов ajax-запросов.

И вам нужно использовать параметры внутри, где у вас есть данные: строка данных и т. Д.

Надеюсь, это вам как-то поможет!

...