#javascript #php #jquery #ajax
#javascript #php #jquery #ajax
Вопрос:
У меня есть веб-сервер (www.domain.com ) то есть пингует веб-сервер подсети (test.domain.com ) для отображаемой информации до тех пор, пока она не изменится. Я хочу, чтобы он выполнял эту проверку каждые 3 секунды, пока статус не изменится на что-то, кроме ожидающего сообщения, затем я хочу отобразить эту информацию в div.
Я знаю, что мне понадобится AJAX для запуска этого каким-то образом, если я захочу загрузить страницу, а затем запустить ее как скрипт, но я изменил, возможно, 2 AJAX-скрипта в своей жизни и понятия не имею, куда идти с этим.
Следующий код — это мой тестовый базовый PHP, который работает для базового рабочего процесса, но он выполняет все это на стороне сервера.
$str = file_get_contents($url);
$spanCount = preg_match_all("/<span id="spanId">(.*?)</span>/",$str,$span);
$spanString = implode($span[0]);
echo "<div class='status' style='display:inline;'>";
while($spanString == "<span id="spanId">Waiting for stuffs...</span>"){
echo "Waiting...";
$str = file_get_contents($url);
$spanCount = preg_match_all("/<span id="spanId">(.*?)</span>/",$str,$span);
$spanString = implode($span[0]);
sleep(3);
}
if($spanString != "<span id="spanId">Waiting for stuffs...</span>"){
echo "<pre>";
echo $spanString;
echo "</pre>";
}
echo "</div>";
Комментарии:
1. AJAX не будет работать для этого, если вы не используете CORS, поскольку домены отправляющих / принимающих серверов разные.
2. Информация об этом? Что, если я изменю это, чтобы каждые 3 секунды вызывать curl на мой другой сервер, и чтобы другой сервер возвращал информацию через curl?
3. Я ожидаю, что попробую поместить вызов AJAX в setInterval, который выполняет скрипт на том же сервере, с которого загружена текущая страница, и этот серверный скрипт выполняет пинг на другой сервер и отправляет ответ обратно на страницу.
4. @bloodyKnuckles Я не думаю, что это сработает для этого рабочего процесса, так как содержимое не всегда будет возвращаться на www, только когда www запрашивает его
Ответ №1:
Должен ли вызов AJAX использовать весь HTML веб-страницы? Если это служба, которой вы управляете, разрешить AJAX получать доступ к вашему php-скрипту и заставить его возвращать объект данных JSON, все было бы очень просто.
get to status.php returns -> {status:"waiting", content: null} //do nothing
get to status.php returns -> {status:"waiting", content: null} //do nothing
get to status.php returns -> {status:"someawesomestate", content: "<blink><marquee>You're our 1,000,000th visitor!</marquee></blink>"} // grab content and update page
Использование JSONP позволит вам очень легко перехватывать данные между доменами, если у вас возникнут проблемы. (Пример с использованием jQuery)
$.getJSON('the/path/status.php').
.done(function(json) {
if(json.status != "waiting") {
$('.some-container').html(json.content);
}
})
.fail(function( jqxhr, textStatus, error ) {
alert('something exploded.');
});
Комментарии:
1. На самом деле это XML, который возвращается в успешном «someawesomestate». обычный текст, который отображается в режиме ожидания. Я собираюсь проверить ваше предложение!
2. если это не ответ json, getJSON не будет работать! это может быть XML-строка, упакованная внутри ответа json, но для корректной работы getJSON (p) вам обязательно нужно будет вернуть ajax-вызову фрагмент json
3. Да, я собираюсь попытаться изменить свой test.domain.com чтобы дать JSON. (это написано на C #, который для меня новый, так что посмотрим). Изучайте новые вещи весь день!
4. Однако ваш пример все равно будет запускаться PHP, поэтому страница не будет загружаться полностью, пока не будет получен ответ someawesomestate, верно?
5. страница с контейнером и текстом по умолчанию доставляется в браузер. затем браузер опрашивает сервер, и когда он получает полезную нагрузку, он обновляет dom. позвольте мне собрать небольшую скрипку.