【发布时间】:2020-09-04 19:21:40
【问题描述】:
当我的 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;
});
如何做到这一点?
【问题讨论】:
-
您在第一次 AJAX 调用中不只是返回图库数据有什么特别的原因吗?为什么要做两个?除此之外,考虑只将数据发送到 JavaScript 并使用它在本地构建 HTML,而不是尝试发送大量 HTML。您还应该确保缓存正确。
-
没有两个 AJAX 调用只有一个,这是我返回画廊数据的地方,如果不清楚,抱歉。在本地构建 HTML 是否会显着加快进程,还是只是一件小事?我宁愿只在它是一项重大改进时才这样做,因为我需要做很多改变才能使它起作用..
-
为什么要在服务器上保存文件?只需在对您的 XmlHttpRequest 的响应中返回生成的 HTML 字符串,然后编写一些 Javascript 将该 HTML 放入您的页面。否则,您将 a) 具有磁盘 I/O 的开销,并且 b) 您必须向服务器发出 2 个请求(一个用于生成 HTML,另一个用于检索它保存到的文件)。这根本没有效率。
-
很明显,服务器将再收到 27 个请求来加载所有单独的图像(除非你已经将它们 base64 编码到 HTML 中,你没有提到吗?),所以永远不会是即时的。但是您当然可以像我上面提到的那样使加载 HTML 的过程更高效。
-
感谢您的编辑。 “我怎样才能得到相应的 PHP 脚本来导出字符串?”...好吧,如果您向我们展示了当前生成文件的相关 PHP 代码,那么我们可能会有机会告诉您。如果我必须猜测,您可能只需要
echoHTML 字符串,而不是将其发送到 file_put_contents 或其他什么。
标签: javascript php xmlhttprequest