Ответ 1
Выполнение вызовов все время
Если вы хотите одновременно выполнять все вызовы 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, поэтому вы сможете легко работать с этими объектами.
изменить: небольшие модификации в 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" не поддерживают синхронную работу. Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, пока запрос активен.