Все звонки одновременно
Если вы хотите выполнять все вызовы ajax одновременно, вы можете просто вызвать запрос ajax сразу после остальных. Вы даже можете назначить им один и тот же обработчик успеха. Если вы хотите более «элегантный» подход, я бы сделал что-то вроде этого:
// define a set of requests to perform - you could also provide each one
// with their own event handlers..
var requests = [
{ url: 'http://someurl', data: yourParams },
{ url: 'http://someurl', data: yourParams },
{ url: 'http://someurl', data: yourParams },
{ url: 'http://someurl', data: yourParams }
];
var successHandler = function (data) {
// do something
}
// these will basically all execute at the same time:
for (var i = 0, l = requests.length; i < l; i++) {
$.ajax({
url: requests[i].url,
data: requests[i].data,
dataType: 'text',
success: successHandler
});
}
.
сделать один запрос
Я не знаю ваш вариант использования, но, конечно, вы действительно должны пытаться получить все данные, которые вы извлекаете, в одном запросе. Это не будет напрягать ваш сервер, сайт / приложение будет казаться пользователю более быстрым и это лучший долгосрочный подход.
Я бы попытался объединить checkAvailability
и getWebTree
в один запрос. Вместо того чтобы получать данные в Javascript в виде текстовых объектов, лучшим подходом было бы получать их в виде данных JSON. К счастью, PHP предоставляет очень простые функции для преобразования объектов и массивов в json, поэтому вы сможете довольно легко работать с этими объектами.
edit : небольшие изменения в коде PHP теперь, когда я лучше понимаю ваш вариант использования.
Так что-то вроде этого в коде PHP / CI:
function getRequestData () {
if (checkAvailability() == 'available') {
$retval = array (
'available' => '1',
'getWebTree' => getWebTree()
);
} else {
$retval = array (
'available' => '0'
);
}
header('Content-type: text/javascript; charset=UTF-8');
echo json_encode($retval););
}
И код Javascript может затем обращаться к ним с помощью одного запроса Ajax:
$.ajax({
url: 'http://yoururl/getRequestData',
dataType: 'json',
success: function (jsonData) {
// we can now access the parameters like this:
if (jsonData.checkAvailability) {
// etc
}
//and of course do something with the web tree:
json.getWebTree
}
});
.
Выполнять запросы синхронно
Если вы установите для параметра async
в параметрах $ .ajax значение false
, то функции будут выполняться синхронно, поэтому ваш код останавливается до завершения выполнения ... или, как сказано в документации:
asyncBoolean
По умолчанию: true
По умолчанию все запросы отправляются асинхронно (т.е. по умолчанию установлено значение true). Если вам нужны синхронные запросы, установите для этого параметра значение false. Междоменные запросы и dataType: запросы «jsonp» не поддерживают синхронную работу. Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, когда запрос активен.
См. http://api.jquery.com/jQuery.ajax/