javascript - Laravel @include in js 被立即执行
问题描述
我目前正在网页上创建一个功能,旨在在更改某个下拉菜单值并根据请求响应更改网页时使用 js 创建对服务器的 HTTP 请求。为此,我使用 Laravel @include 来包含将基于 json 响应构建页面的视图。
问题出在这条线上allNews.innerHTML+=(`@include('partials.news.post',['news'=>`+news.data[i]+`])`)
这里的问题是页面加载时js立即抛出错误(在视图中由参数news.data [i]为null),它甚至不等待触发EventListener或等待要求得到答复。如果我删除这行代码,它不会抛出任何错误并按预期工作,但如果我评论它,就会发生同样的错误,至少可以说这似乎很奇怪。这里似乎有什么问题?
我使用这个stackoverflow 问题来作为我开发的基础。
我知道视图构建良好并且不会抛出错误,因为我在其他情况下使用它。
<script defer>
let select = document.getElementById("sort-select");
let allNews = document.getElementById("posts-result");
let xhttp = new XMLHttpRequest();
console.log(js_query)
select.addEventListener("change",function(){
xhttp.open("GET", "/api/load-posts-search?sortBy="+ select.value +"&search=" + js_query, false);
xhttp.send();
let news = JSON.parse(xhttp.responseText);
console.log(news);
allNews.innerHTML=""
for(i=0;i<news.total;i++)
{
console.log(news.data[i]);
allNews.innerHTML+=(`@include('partials.news.post',['news'=>`+news.data[i]`])`)
}
})
</script>
解决方案
XMLHttpRequest 将是异步的,所以我认为您需要更改:
select.addEventListener("change",function(){
xhttp.open("GET", "/api/load-posts-search?sortBy="+ select.value +"&search=" + js_query, false);
xhttp.send();
let news = JSON.parse(xhttp.responseText);
console.log(news);
allNews.innerHTML=""
for(i=0;i<news.total;i++)
{
console.log(news.data[i]);
allNews.innerHTML+=(`@include('partials.news.post',['news'=>`+news.data[i]`])`)
}
})
至:
select.addEventListener("change",function(){
xhttp.open("GET", "/api/load-posts-search?sortBy="+ select.value +"&search=" + js_query, false);
xhttp.send();
// wait on the response from the request
xhttp.onload = function() {
let news = JSON.parse(xhttp.responseText);
console.log(news);
allNews.innerHTML=""
for(i=0;i<news.total;i++)
{
console.log(news.data[i]);
allNews.innerHTML+=(`@include('partials.news.post',['news'=>`+news.data[i]`])`)
}
}
})
我不确定是否@include
在 JavaScript 中使用,我没有做过什么来了解它的工作情况。如果包含的刀片文件是静态的,我认为它会很好,我只是不确定它将如何工作,将news
来自 ajax 请求的动态属性传递给它,即一部分@include
是服务器端,一部分是客户端,但我可能是错的,它会完全正常工作。
您可能需要重构并从控制器返回生成的部分的 html,而不是尝试在 ajax 请求的成功阶段执行此操作。
推荐阅读
- python - 在文件夹中导入csv
- javascript - 当文本周围有空间时,文本总是离开它的容器
- python - 如何修复 Visual Studio“AttributeError:'Engine' 对象没有属性 'getproperty'”
- java - 为什么我有这个错误?MySQLNonTransientConnectionException
- git - git:什么是树内的提交对象?
- python - Raspberry pi 3b+ 上的 IndexError 但在 PC Python 中没有
- flutter - 无法在颤振中使用构建运行器生成 mobx
- java - 连接提取的休眠问题“无法连接到基本类型的属性”
- c# - 应用程序找不到位于另一个项目中的 Razor 页面
- virtual-machine - 无法访问我家中但想从办公室访问的自托管虚拟服务器(Ubuntu 20.04)