Chrome JQuery AJAX обратного вызова на успех не стреляет - PullRequest
1 голос
/ 16 декабря 2011

Насколько я знаю, $.ajax всегда работал довольно гладко в каждом браузере до сих пор.У меня есть довольно простая функция, вызываемая, когда происходит несколько действий от пользователя.В Firefox все работает гладко.Но в Chrome, пока запускается запрос $.ajax, обратный вызов при успешном завершении не срабатывает.

Вот фактический фрагмент:

    var form  = $("#templateCreator"),
    formType  = form.attr("method"),
    formData  = form.serialize(),
    action    = form.attr('action');

    $.ajax({
        type: formType,
        url: action,
        data: formData,
        success: function(){
            console.log('Can\'t see me in Chrome, but ok in firefox !')

            // Handle all form submit events to form validator first
            validator(form, targetInput);
        }
    });

То, что озадачивает, ничего плохого не кажетсясериализуется и отправляется правильно.Кто-нибудь знает, что я пропустил?

Ответы [ 4 ]

3 голосов
/ 16 декабря 2011

Начните с добавления ошибки и завершите метод, как предложил @Jasper.

$.ajax({
        type: formType,
        url: action,
        data: formData,
        success: function(){
            console.log('Can\'t see me in Chrome, but ok in firefox !')

            // Handle all form submit events to form validator first
            validator(form, targetInput);
        },
        error: function() {
            console.log($.makeArray(arguments));
        },
        complete: function() {
            console.log($.makeArray(arguments));
        }
    });

Затем вы можете:

  1. открыть отладчик Chrome (F12), перейти к тегу scriptsи установите точку останова внутри success / complete / error;проверьте трассировку стека и значения для прозрения;)
  2. посмотрите журналы консоли
  3. Для большой радости снимите каждый зиг!
2 голосов
/ 29 октября 2012

У меня была эта проблема, и я установил async: false. Это работает для меня в Chrome. Похоже, в Chrome есть проблема с async: true.

   restget = function(url, cb){
        $.ajax({
        url: url,
        dataType: 'json',
        crossDomain: true,
        async: false,
        success: cb
        });
2 голосов
/ 08 августа 2012

Попробуйте это .....

data: formData, async: false,

В Chrome есть некоторые проблемы с асинхронными вызовами.

0 голосов
/ 16 января 2013

У меня была похожая проблема при попытке получить массив json.Мне пришлось добавить dataType: 'json' к моему ajax, чтобы браузеры не Firefox знали, какой у меня тип данных.Например:

$.ajax({
    type: 'Get',
    url: "http://api.geonames.org/earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=demo",
    success: function(data){
        var jsonArray = jQuery.parseJSON(data);
        alert(jsonArray.status.message);
    }
});

и

$.ajax({
    type: 'Get',
    url: "http://api.geonames.org/earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=demo",
    dataType: 'json',
    success: function(data){
        var jsonArray = data;
        alert(jsonArray.status.message);
    }
});

будут отображать то же самое при запуске в Firefox Firebug.Но когда вы запустите его в Chrome DevTools, он будет работать только на нижнем.Я надеюсь, что это решит вашу проблему.

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