【发布时间】:2016-07-09 15:21:09
【问题描述】:
我正在使用 Laravel 来实现基于主页的模板。不同的页面有不同的JS脚本,所以我创建了一个模板来导入JS脚本:
<!-- jQuery 2.1.3 -->
<script src="{{ URL::asset('plugins/jQuery/jQuery-2.1.4.min.js') }}"></script>
<!-- Bootstrap 3.3.2 JS -->
<script src="{{ URL::asset('js/bootstrap.min.js') }}" type="text/javascript"></script>
<!-- Ajax Page Loading -->
<script>
function ajax(url) {
$('.main-content').fadeOut(100); //hide the page
$('.spinner').show(); // show a spinner
$.ajax(url, {
async: true,
success: function(data) {
$('#header').html(data[0]); //append received header to header
$('#content').hide().html(data[1]).fadeIn(500); //show the page again
$('body').append(data[2]); //append scripts to body
$('.spinner').hide();
},
});
}
</script>
@yield('extra-scripts') <--- /* HERE is where the scripts will be */
我还使用 AJAX 仅加载内容而不刷新页面。 ajax 函数将用于将任何 url 加载到 div“内容”中。但是,我还需要加载脚本以使页面正常工作。
数据是一个包含三个字段的数组:
- 0 是标题 html
- 1 是内容 html
- 2 是动态添加的脚本
问题是每当我加载页面时,我都会收到此错误:
主线程上的同步 XMLHttpRequest 已被弃用,因为 其对最终用户体验的不利影响。如需更多帮助, 检查https://xhr.spec.whatwg.org/。
我不希望脚本加载影响用户体验。必须是异步的。
我已经尝试过的:
-
jQuery.getScript
- 此解决方案需要我将所有脚本移动到单独的 JS 文件中。这可能会解决它,但我宁愿将它们全部保留在相应的页面中。
-
AjaxPreFilter
- $.ajaxPrefilter with options.async = true 使脚本在页面之后加载,从而使某些属性未定义且无法正常工作。
【问题讨论】:
标签: javascript jquery ajax laravel