#javascript #php #xmlhttprequest
#javascript #php #xmlhttprequest
Вопрос:
Функция обратного вызова запускается, когда мой XMLHttpRequest завершен. Я использую асинхронную функцию JavaScript для загрузки содержимого файла, который был создан с помощью функции PHP file_put_contents()
.
Моя проблема в том, что иногда загрузка элементов галереи занимает очень много времени. Я бы предпочел вернуть HTML-код, который я хочу загрузить, в виде строки, а не записывать его в файл.. но я не знаю как?
Это мой Javascript:
function xhr(php, form, after) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
after();
}
}
xhr.open('POST', php, true);
xhr.send(new FormData($(form)));
}
Как я могу получить соответствующий PHP-скрипт для экспорта строки? Мне нужно что-то, что помещает $myExportString
в качестве параметра внутри after()
, тогда я мог бы использовать это следующим образом:
xhr("../session/searchquery.php", "searchfilterterms", function( myExportString ) {
document.getElementById("someDiv").innerHTML = myExportString;
});
Как это можно сделать?
Комментарии:
1. Есть ли какая-то особая причина, по которой вы не просто возвращаете данные галереи при первом вызове AJAX? Почему вы делаете два? Кроме того, рассмотрите возможность отправки только данных в JavaScript и используйте их для создания HTML локально, вместо того, чтобы пытаться отправлять большие объемы HTML. Вы также должны убедиться, что вы кэшируете надлежащим образом.
2. Существует не два AJAX-вызова, а только один, и именно здесь я возвращаю данные галереи, извините, если это было непонятно. Значительно ли ускоряет процесс создание HTML локально или это просто меньшая вещь? Я бы предпочел делать это только в том случае, если это серьезное улучшение, потому что мне нужно будет внести много изменений, чтобы это сработало..
3. Почему вы сохраняете файл на сервере? Просто верните сгенерированную HTML-строку в ответе на ваш XMLHttpRequest, а затем напишите некоторый Javascript, чтобы поместить этот HTML на вашу страницу. В противном случае у вас а) возникают накладные расходы на дисковый ввод-вывод, и б) вам приходится отправлять 2 запроса на сервер (один для генерации HTML, а другой для извлечения файла, в который он был сохранен). Это совсем не эффективно.
4. Очевидно, что затем будет еще 27 запросов к серверу для загрузки всех отдельных изображений (если вы не закодировали их в кодировке base64 в HTML, вы не упомянули?), Так что это никогда не будет мгновенно. Но вы, безусловно, можете сделать процесс загрузки HTML более эффективным, как я упоминал выше.
5. Спасибо за редактирование. «Как я могу получить соответствующий PHP-скрипт для экспорта строки?» … что ж, если бы вы показали нам соответствующий PHP-код, который в настоящее время генерирует файл, тогда у нас был бы некоторый шанс рассказать вам. Если бы мне пришлось угадывать , вам может просто понадобиться
echo
строка HTML, а не отправлять ее в file_put_contents или что-то еще.
Ответ №1:
Нет необходимости сохранять файл на сервере. Вы можете просто вернуть сгенерированную HTML-строку в ответе на ваш XMLHttpRequest, а затем написать некоторый Javascript, чтобы поместить этот HTML на свою страницу.
В противном случае а) у вас возникают накладные расходы на дисковый ввод-вывод и б) вам приходится отправлять 2 запроса на сервер (один для генерации HTML, а другой для извлечения файла, в который он был сохранен). Это совсем не эффективно.
В PHP вместо сохранения сгенерированной HTML-строки на диск вы можете повторить ее, например, что-то вроде
echo $finalVariableWithHTMLString;
(Я не знаю вашего точного кода, поскольку он не показан в вопросе). Если вы повторяете его, то оно становится содержимым ответа на вызов AJAX. Вот как вы возвращаете ответ на HTTP-запрос в PHP — вы повторяете содержимое на выходе.
Затем вы можете получить это из xhr.responseText
переменной в JavaScript. Таким образом, вы могли бы написать
after(xhr.responseText);
в вашем примере, чтобы передать HTML в вашу after()
функцию.