jQuery $ .POST работает только тогда, когда после него выполняется какая-то функция. - PullRequest
1 голос
/ 30 июля 2011

У меня есть этот проект jQuery, который почти завершен, для последней части, когда данные пользователя были успешно проверены, он выполняет внешний скрипт PHP с использованием функции $ .post, передавая в качестве параметров введенную пользователем информацию.

Моя проблема заключается в том, что моя функция обратного вызова работает, только если после нее я поставил функцию оповещения.

Работает:

$.post("backend.php", dataString, 
    function(response) {
        if (response=="1") {
            alert("ok"); 
        }
    }, 'html'); 

alert('test');

Но если я не поставлю это предупреждение после закрывающего тега, мой сценарий не выдаст предупреждение "ОК" или что-либо еще в обратном вызове.

Кто-нибудь из вас видит, что не так с моим кодом?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 30 июля 2011

Я предполагаю, что после сценария $.post() есть что-то, что либо приводит к изменению страницы, либо к остановке или неудаче публикации.

По сути, все, что делает alert('test'), это блокирует ваш код в ожидании нажатия кнопки ОК. Единственный способ заставить ваш код работать внезапно - это если что-то выполняется в вашем коде после того второго предупреждения, которое испортило сообщение.

Помните, что пост асинхронный. Это произойдет в фоновом режиме, пока запускается любой другой код, и только при успешном выполнении alert('ok') запускается.

Итак, я думаю, что что-то еще на вашей странице работает и портит сообщение.

1 голос
/ 03 марта 2013

Очень тонкая ловушка для молодых игроков здесь (таких как я).Я делал то же самое, публикуя событие отправки формы.Конечно, форма отправляет и сообщения публикуется одновременно, поэтому, когда ответ публикации возвращается, форма обновляется и сбрасывается сама.Беспорядок царит.

В моем случае, я действительно не хотел, чтобы форма действительно отправляла, так что добавление return false; в качестве окончательного утверждения в моей функции отправки хорошо разобралось.

Например:

$('#myForm').submit(function() {
    $.post('myurl',{some params});
    return false;
};
1 голос
/ 13 августа 2012

Так что я опаздываю на вечеринку здесь, но столкнулся с тем, что казалось мне точно такой же проблемой, и в конце концов нашел решение. В моем случае у меня была кнопка отправки формы, которую я также пытался использовать в качестве триггера для вызова JQuery POST. Проблема заключалась в том, что когда форма была отправлена, она, по-видимому, отменила вызов JQuery POST.

В моем случае решение состояло в том, чтобы изменить кнопку отправки на обычную кнопку, а затем выполнить отправку формы в той же функции JQuery, что и при вызове POST - после вызова POST. Мне также нужно было внести небольшую задержку в вызов формы отправки. Итак, это выглядело так:

$("#saveStuff").click(function () {  //my save button, no longer a submit
        $.post('UpdateStatusFlag', {}, function (data) {
              //some irrelevant stuff here
            }
        });
        setTimeout("$('#MyForm').submit()", 100); //needed the small delay to allow the post call to complete
});

Надеюсь, это поможет нескольким людям совершить ту же ошибку, что и я.

...