2010-10-13 3 views
1

Я не уверен, что это возможно или нет, и я не могу понять, как на самом деле это сделать, если возможно вообще..ajax() вызов, который не ждет немедленного ответа

Что бы я хотел сделать, это сделать список флажков, переданных в вызов .ajax(). Этот вызов .ajax() передает информацию в PHP для обработки (и в этом случае он будет отправлять электронные письма каждому из выбранных идентификаторов).

Однако, я не хочу, чтобы страница (или вызов .ajax() в этом отношении) дождалась завершения скрипта PHP. В основном я хочу, чтобы он передавал данные и двигался дальше (и отображал поле .dialog() и т. Д. И т. Д.)

Вот трюк: I do хочу получить некоторую обратную связь от скрипта PHP , Когда это будет сделано, я хочу, чтобы он возвращал данные пользователю, возможно, отображая панель в верхней части страницы (как и то, что StackOverflow делает, когда у вас есть системные сообщения, они отображаются вверху страницы независимо от того, где вы находятся на сайте.)

Первая часть, имеющая список флажков, отображается. Я так далеко продвинулся, как определить, какие из них проверены и собирать эти данные. Теперь Мне нужно выяснить, как передать его вызову .ajax() таким образом, чтобы PHP мог использовать его для сканирования базы данных для сбора различных сообщений электронной почты и начала отправки сообщений. Не совсем уверен, как передавать данные. Кажется глупым создать dataString, который состоит из id1 = XXX & id2 = XXX & id3 = XXX-and_so_forth.

Я открыт для предложений здесь.

[Изменить] У кого-нибудь есть предложения по части, которую я сделал полужирным шрифтом выше?

+1

Это довольно легко.Вы должны опубликовать код, который у вас уже есть, потому что его не так много, и нам проще просто указывать недостающие биты, чем создавать рабочий пример с нуля. – Tomalak

ответ

4

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

Пример:

$.ajax({ 
    url: "...", 
    data: "<checkboxes>", 
    success: function(data, xhr, status) { 
     // Code to add your banner when AJAX finished 
    } 
}); 

// Inline code to execute whitout wait the end of $.ajax 
+0

Почему я не поставил 2 и 2 вместе ... Я наткнулся на это не так давно, сделав вызов .ajax() и получив что-то после вызов, но поскольку процедура обработки была вне вызова .ajac(), она всегда возвращала ноль. В конце концов, я понял, что мне нужно было поместить его внутрь вызова .ajax(), чтобы он обработал его правильно. Это должно было быть моей подсказкой! Положите его наружу, он обрабатывается параллельно ... – KirAsh4

+0

Вопрос, хотя, если кто-то просматривает страницу (но остается на сайте), он будет повторно инициализировать все мои вещи js (он перезагружает основной файл js, который содержит все), так как бы вызов .ajax() знал, что делать, когда он получает что-то от PHP? – KirAsh4

+0

+1 также вы можете установить параметр 'async:' в запрос 'ajax'. – Gutzofter

0

THEN вы можете пойти в голову и использовать асинхронный вызов ajax, какую бы логику вы не использовали в методе успеха ajax.

MakeAjaxCall() ничего не пишет внутри метода успеха.

Напиши всю свою логику после того, как вы создадитеAjaxCall(), чтобы оба выполнялись параллельно.

makeAjaxCall(), инициализирует процесс doyourlogicInParallel() ... здесь

+0

Спасибо! Я столкнулся с этим не так давно и не собрал его вместе. В 4 часа мозг немного ... медленный ... – KirAsh4

0
If you are making calls to a .php script with AJAX (xmlHttpReq) and use 
flush, this will send data to your script HOWEVER it will not set the 
xmlHttpReq.readyState to 4 -- which is a requirement to use the information 
sent (Firefox does however allow you to use the responseText property with a 
readyState == 3 but IE will throw an error). 

Я получил от этого PHP.net при чтении вверх на flush() - http://www.php.net/manual/en/function.flush.php

В основном это означает, что вы можете иметь процесс, начатый вызов ajax и вернуть ему некоторое значение, например, echo "hello";, но у него нет установленного для readistate значения 4. Поэтому, если вы умны в этом, вы можете nipulate ваши ответы от вашего PHP-скрипта, например, в цикле while с таймером.

+0

Это интересный подход к возврату вывода, даже если кажется, что запрос выполнен. –

+0

На самом деле, я не полагался на readyState. Все мои вызовы PHP возвращают целое число, строку или допустимый XML, и мои JS-вызовы будут анализировать это. Например, простой вызов «да/нет» БД возвращает 0 или 1, и JS действует в соответствии с этим возвратом. Раньше я добавлял пользовательские ошибки в скрипт PHP, который возвращался к вызову ajax (E_LOGIN, E_QUERY, такие тупые вещи). – KirAsh4

Смежные вопросы