2010-09-06 3 views
0

Я разрабатываю приложение cakephp, использующее методы jquery и post в фоновом режиме.jQuery слишком быстро (быстрее, чем mysql)

Когда cakephp отправляет почтовый запрос в фоновом режиме, div должен обновлять (или регенерировать), и он должен показывать новый контент.

Почтовый метод вызывает другой 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'); 

UPDATE: нормально, поэтому, я получаю, где проблема. как Четан Шастри предложил ниже, судимые с:

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

проблемой является причиной ответа на «/ публикация/DeleteItem /» + valueClicked это страница не найдена. предположите, что это причина cakephp (на самом деле эта страница существует, но cakephp возвращается, как будто это не так).

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

+1

Опубликуйте свой текущий код, чтобы очистить вещи :) –

+2

Это звучит так, будто вы неправильно пытаетесь что-то вернуть, вместо того чтобы полагаться на обратные вызовы. См. Здесь: http://stackoverflow.com/questions/3619888/jquery-ajax-request-inside-a-function-how-to-return-the-value-i-got/3619986#3619986 и здесь: http:// /stackoverflow.com/questions/3537434/cant-get-correct-return-value-from-an-jquery-ajax-call. –

+0

У вас есть вид delete_ite.ctp для возврата json или прямого возврата с контроллера. Из вашего сообщения я предположил, что вам не хватает представления, поэтому cakePHP отобразит ошибку. – dqminh

ответ

2

Где вы разместили функцию regenerate?

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

2

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

+1

Вы можете выполнять синхронные запросы ajax, но они блокируют браузер, поэтому не рекомендуется. – Douglas

0

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

+0

Можете ли вы проверить мой код и помочь мне в достижении. это два почтовых звонка .. – user198003

0

Просто поместите вызов, чтобы получить элементы в обратном вызове функции «Удалить элементы». Что-то вроде этого:

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

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

+0

вы можете проверить последнее обновление моего оригинального сообщения? TNX! – user198003