утверждайте, что форма не останавливает в jQuery ajax вызов

Во-первых, у вас есть число

if (tmp = NULL)

, которое должно быть

if (tmp == NULL)

, иначе вы всегда сбрасываете tmp в NULL и «if» никогда не вводится.

Во-вторых, в update () вы имеете дело с «root» вместо «tmp», правильное значение равно

    while (tmp != NULL)
    { 
        if (tmp->data % 2 == 0)
        {
            tmp->data = tmp->data / 2;
        }
        else
        {
            tmp->data = tmp->data * 2;
        }
        printf("\t%d", tmp->data);
        tmp = tmp->next;
    }

, так что на самом деле вы уже достаточно близки. пс .: первый вызов

createList((rand() % 10) + 1)

не нуждается в аргументах

8
задан Andrew Whitaker 10 December 2011 в 23:20
поделиться

6 ответов

Я предполагаю, что у вас есть что-то вроде:

form.submit(function(event) {
    $.ajax(...);
});

Вы хотите вернуть false (или вызвать event.preventDefault () ) в обработке событий сама функция, а не в вызове AJAX, например:

form.submit(function(event) {
    event.preventDefault();
    $.ajax(...);
});
15
ответ дан 5 December 2019 в 06:10
поделиться

Вам нужно сделать обратный вызов.

Эта запись в FAQ мне очень помогла, когда у меня возникла именно эта проблема.

getUrlStatus('getStatus.php', function(status) {
    alert(status);
});

function getUrlStatus(url, callback) {
    $.ajax({
        url: url,
        complete: function(xhr) {
            callback(xhr.status);
        }
    });
}

Причина в том, что вы можете не возвращается в функции AJAX.

Приведенный выше код не работает должным образом из-за характера асинхронного программирования. Предоставленный обработчик успеха вызывается не сразу, а скорее в какое-то время в будущем, когда ответ получен с сервера. Поэтому, когда мы используем переменную 'status' сразу после вызова $ .ajax, ее значение по-прежнему не определено.

2
ответ дан 5 December 2019 в 06:10
поделиться

Вы не можете поместить этот код в функцию или в отправку формы, функция успеха возвращает свой результат, возвращаясь в контекст jQuery ajax, НЕ форма отправки контекста.

1
ответ дан 5 December 2019 в 06:10
поделиться

In this case you need to perform a synchronous http request, i.e. you have to set the async option to false.
In your version the httpxmlrequest is asynchronous. It might be finished long after your onsubmit handler has returned and the onsuccess callback is invoked out of context of the onsubmit handler.
The "return false" will be the return value of the anonymous function function(result) {... } and not the return value of the onsubmit handler.

1
ответ дан 5 December 2019 в 06:10
поделиться

У меня тоже была эта проблема, но я решил ее, изменив тип ввода = "submit" to type = "button", а затем просто выполните свой запрос ajax

   $("input#submitbutton")
    {
                          $.ajax(
                        {                         type: "POST",
                             async: false,              
                            url: "CheckIdExist",
                             data: param,
                            success: function(result) {
                                 if (result == true){
                                    //TODO: do you magic
                                 }                      
                                 else
                                  $("form").submit();           
                             },
                             error: function(error) {
                                alert(error);
                                return false;
                            }
                        });
    });
1
ответ дан 5 December 2019 в 06:10
поделиться

Небольшой вариант этого вопроса: Я хочу использовать jquery и ajax для представления пользователю сообщения об ошибке, но потом делать обычную обработку, если ошибки нет.

Предположим, что метод «check» возвращает пустой ответ, если ошибок нет, и содержит ошибки, если они есть.

Тогда вы можете сделать что-то подобное в своей готовой функции:

$("#theform").submit(function() {
    var data = { ... }
    $.get('/check', data,
        function(resp) {
            if (resp.length > 0) {
                $("#error").html(resp);
            } else {
                $("#theform").unbind('submit');
                $("#theform").submit();
            }
    });
    event.preventDefault();
});

Итак, как это работает? Когда запускается внешняя функция отправки, она создает данные, необходимые для вызова AJAX (здесь функция более высокого уровня получает). Вызов запланирован, и основной поток операции сразу же продолжается, но отправка безоговорочно останавливается, поэтому ничего не происходит.

Проходит некоторое время, и вызов AJAX возвращает результат запроса. Если не пусто, результат отображается пользователю.

Однако, если ответ пуст, функция отправки не привязана. Это предотвращает дополнительный вызов системы через внешнюю функцию отправки. Вызывается внутренняя функция отправки. Это вызывает фактическую отправку формы в цель формы, и жизнь продолжается, как и ожидалось.

7
ответ дан 5 December 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: