JQuery слишком быстрый (быстрее, чем MySQL) - PullRequest
0 голосов
/ 07 сентября 2010

Я разрабатываю приложение CakePHP, которое использует методы jquery и post в фоновом режиме.

Когда CakePHP отправляет запрос на публикацию в фоновом режиме, div должен обновить (или перегенерировать), и он должен показатьновое содержимое.

Метод Post вызывает другой php-файл, выполняющий запрос MySQL.Div также вызывает mysql и выбирает правильные данные из базы данных.

Проблема в том, что div обновляется (или восстанавливается) перед первым запросом mysql.Так что все работает нормально, но как я могу сказать, что div немного подождет, пока не будет выполнен запрос mysql?

Вот мой код ...

$.post('/publications/deleteItem/' + valueClicked, function(data) {
}, 'html');

$.post('/publications/getItems/' + val + '/' + val1, function(data) {
    $("#relatedNumerationPublications").empty().append(data);
}, 'html');

ОБНОВЛЕНИЕ:Хорошо, я понял, где проблема.как и Chetan Sastry, предложенный ниже, попробуйте:

$.post('/publications/deleteItem/' + valueClicked, function() {
    $.post('/publications/getItems/' + val + '/' + val1, function(data) {
        $("#relatedNumerationPublications").empty().append(data);
    }, 'html');
}, 'html');

проблема - причина ответа для '/ публикаций / deleteItem /' + valueClicked - страница не найдена.угадайте, что это причина CakePHP (на самом деле эта страница существует, но CakePHP возвращается, как будто ее нет).

Можно ли как-то пропустить ошибку «Страница не найдена» и продолжить работу с кодом?

Ответы [ 4 ]

2 голосов
/ 07 сентября 2010

Ajax-вызовы (по определению) асинхронны, поэтому, если вы просто поместите следующую инструкцию javascript сразу после ajax-вызова, вы всегда столкнетесь с этой проблемой. Как уже говорилось, используйте параметр onSuccess или синхронный вызов ajax (напомню, jquery предоставляет нечто подобное).

2 голосов
/ 07 сентября 2010

Куда вы помещаете свою regenerate функцию?

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

0 голосов
/ 07 сентября 2010

Просто поместите вызов, чтобы получить элементы в обратном вызове функции удаления элементов. Как то так -

$.post('/publications/deleteItem/' + valueClicked, function() {
    $.post('/publications/getItems/' + val + '/' + val1, function(data) {
        $("#relatedNumerationPublications").empty().append(data);
    }, 'html');
}, 'html');

Теперь ваши getItems будут ждать до завершения deleteItems. (Предполагая, что вы не используете асинхронную бэкэнд-технологию!)

0 голосов
/ 07 сентября 2010

Вы можете проводить Ajax-опрос время от времени после первого действия SQL для внесения изменений. Выполняйте регенерацию только после получения нового значения для опроса из PHP.

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