Что, если междоменный запрос Ajax соответствует содержимому целевого div, генерируется на несколько секунд позже, чем загруженный документ
Мне нужно получить содержимое сгенерированного div на странице внешнего сайта.
Я долго искал и мне не повезло.
Мне удалось извлечь весь статический контент с этой страницы (междоменный). Но содержимое этого div будет сгенерировано только после нажатия кнопки на странице.
URL-адрес выглядит следующим образом: http://www.xxx.com/getPrice поэтому при выборе типа и почтового индекса URL-адрес становится http://www.xxx.com/getPrice?Type=5&postcode=3000
и содержимое этого div будет отображаться через 2-3 секунды после загрузки всего содержимого страницы.
Вот код
$.ajax({
url: link,
type: 'GET',
success: function (res) {
var headline = $(res.responseText).find('#divID').text();
$('#container').html(headline);
}
});
Обновить:
метод jQuery .delay() не может удовлетворить мое требование, потому что мне все еще нужно выполнить вызов ajax без задержки. Более того, после выполнения вызова мне нужно, чтобы функция обратного вызова могла быть запущена после загрузки сгенерированного / динамического / отложенного содержимого (не во время загрузки содержимого страницы). Итак, здесь 2 разных времени. Я просто не знаю, возможно ли это.
Обновление 2:
Полный метод не тот, который мне нужен. Он запускается, когда запрос завершается, но к этому времени сгенерированное содержимое div не было сгенерировано. Так что это еще не решение. Вот картинка для демонстрации того, о чем я говорю. Вы можете видеть, что div #output, его содержимое все еще пусто.
Обновление 3:
Вот код для вставки содержимого в div #output.
var markerImage = "http://www.racv.com.au/wps/wcm/connect/ebffbd00473d0422974bbfc0de4a49c9/marker.png?MOD=AJPERES&CACHEID=ebffbd00473d0422974bbfc0de4a49c9";
var searchString="";
var fuelType=2;
var resultPage = document.location;
resultPage = String(resultPage).split("?"); // Get URL without the query string
resultPage = resultPage[0];
function searchFuel(){
if (document.getElementById('fuelType3').checked) {
fuelType = 3;
} else if (document.getElementById('fuelType2').checked) {
fuelType = 4;
} else if (document.getElementById('fuelType4').checked) {
fuelType = 6;
} else if (document.getElementById('fuelType1').checked) {
fuelType = 2;
} else if (document.getElementById('fuelType5').checked) {
fuelType = 5;
}
//window.open("/wps/wcm/connect/racv/internet/primary/my+car/advice+_+information/fuel/petrol+prices/search+for+petrol+prices+around+melbourne?fuelType="+fuelType+searchString, '_self')
window.open(resultPage + "?fuelType=" + fuelType + searchString, "_self");
}
Эта функция активируется нажатием кнопки, а ниже приведен код.
<input type="image" style="margin-top: 40px; cursor: pointer;" src="/wps/wcm/connect/993c7080474f0a60a0bff5aa2893940e/fpButton.gif?MOD=AJPERES&CACHEID=993c7080474f0a60a0bff5aa2893940e" alt="search" id="search" border="0" class="submit" onclick="searchFuel();" onmouseover="javascript: this.style.cursor='pointer'">
2 ответа
Я вижу две возможности:
либо "задержанное" содержимое загружается по внешней ссылке через вызов ajax: в этом случае вам потребуется доступ к URL-адресу этого дополнительного вызова ajax.
или "задержанный" контент уже присутствует в ответе и вставляется в DOM с помощью setTimeout: в этом случае данные уже присутствуют в полученном вами ответе (либо внутри скрытого html-узла, либо сохраняются в каком-либо javascript-коде). переменная или написана exetenso в коде javascript...), вам нужно будет найти способ извлечь ее из ответа.
Ваш #output
div изменяется в результате вызова ajax.
Откройте консоль Firebug, перейдите на страницу, которую вы пытаетесь очистить, выберите свою географическую зону и посмотрите, что отображается в консоли при обновлении страницы.
Некоторые запросы ajax отправлены. Пролистайте их и найдите, какая из них содержит необходимую вам информацию.
Используйте задержку перед отображением контента, как
$('#container').delay(800).html(headline);