javascript - AJAX 响应的脚本标签位置错误

标签 javascript jquery ajax

我在通过 AJAX 更新页面内容(结果)的网站上遇到问题。此 AJAX 返回的内容中包含一个 script 标记,它呈现 LinkedIN“共享”按钮。

当页面首次加载初始结果集时,布局如下所示:

Social media controls on page load

每个按钮都位于左浮动 div 内,HTML 在 Chrome 开发者工具中如下所示:

HTML on page load

正如您所看到的,script 标记出现在它应该出现的位置,即 div 中,并且动态生成的 span 包含按钮就在上面。

现在,当我通过 AJAX 请求附加更多结果时,事情变得有点困惑,如下所示:

AJAX returned results

正如您所看到的,LinkedIN 按钮完全不合适,在开发人员工具中查看 HTML 时,原因显而易见:

HTML from AJAX request

script 标记不在代码文件中出现的 div 内,而是出现在结束 tr 标记之后 - 并且span 按钮就位于上方。

那么,这是为什么,更重要的是,可以采取什么措施来确保 script 标记位于其所属位置,以便布局正确?

仅供引用 - body 的底部是 javascript,它加载 LinkedIn .js 文件,在 AJAX 请求更多结果完成后,会调用 LinkedIn .parse() 方法,该方法是应该解析完整的文档并呈现按钮。

编辑

该应用程序是使用 ASP.NET MVC 构建的,返回的响应使用与初始页面加载相同的 .ascx 控件来格式化结果。

编辑 - 用于检索额外数据的 AJAX 请求

function LoadMore(uri, last, loader, end)
{    
    isLoading = true;
    $(loader).show();
    $.post(uri, function(data)
    {
        if (data != "") 
        {
            $(last).after(data);
            isLoading = false;
            // re-do social media share initialisation on the new AJAX-added content
            gapi.plusone.go('container');
            twttr.widgets.load();
            FB.XFBML.parse();
            IN.parse(document.body);
        }
        else
        {
            $(end).show();;
        }
        $(loader).hide();           
    });
}

编辑

从服务器返回的实际 HTML 是正确的。查看源代码会在正确的位置显示 script 标记,但在 Chrome 开发者工具中查看页面(如上图所示),会在错误的位置显示 script DOM。 IE9 和 Chrome 中都会出现这种情况。

最佳答案

你是动态构建 html 吗?也许这与错误配置的回调有关。如果您使用 $.ajax({...}),请确保在“success:”属性中指定下一次迭代,以防止无序渲染。

关于javascript - AJAX 响应的脚本标签位置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7782928/

相关文章:

javascript - 发出多个 Axios 请求导致 CORS 错误

javascript - 为什么我的 JavaScript DOM 遍历不起作用?

jquery - jQuery 中按键之间的延迟 Action

jquery - 使用 blueimp upload 上传之前旋转图像

javascript - 使用 AJAX 从 MySQL 获取数据

php - CodeIgniter 在 JSON 响应中返回 HTML

javascript - 尝试将待办事项列表项保存到本地存储

Javascript 默认关键字

jquery:使用包含的可拖动时垂直扩展div

javascript - 试图防止页面上的重复项