首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Javascript原封不动地加载ASPX页面

使用Javascript原封不动地加载ASPX页面
EN

Stack Overflow用户
提问于 2013-04-06 15:35:24
回答 1查看 229关注 0票数 0

我正在为微软SharePoint编写一个单页web应用程序。

我很想在$.get()上添加内容,但我遇到了一点麻烦。

如果我像这样拉入内容:

代码语言:javascript
复制
function getLocalPage(url, callback) {
    $.get(url, function(data) {
        var $page = $(data).filter('.tileContent').html();
        callback($page);
    });
}

我得到了我正在寻找的节点,但是我的脚本标记被去掉了。

如果我像这样拉入内容:(参考:jquery html() strips out script tags )

代码语言:javascript
复制
function getLocalPage(url, callback) {
    $.get(url, function(data) {
        var dom = $(data);
        dom.filter('script').each(function(){
            $.globalEval(this.text || this.textContent || this.innerHTML || '');
        });
        var $page = dom.filter('.tileContent');
        callback($page);
    });
}

嵌入在SharePoint中的javascript会放大我的页面,似乎会导致一个完整的回发。

有没有办法只获取我想要的节点,而脚本标记完好无损?

似乎不能两全其美。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-07 00:19:35

不使用简写的jQuery方法.get(),而是尝试使用.ajax()dataType: 'html'

.ajax()文档中提到了dataType: 'html'

HTML“

”:以纯文本形式返回;包含的脚本标记在插入到DOM中时进行计算。

它还说:

“如果指定了' HTML‘,则在将JavaScript作为字符串返回之前,将执行检索到的数据中嵌入的任何HTML。”

这里的重点是“之前”这个词,意思是嵌入式JavaScript在执行时不能直接作用于交付它的超文本标记语言(或产生的DOM片段),尽管它可以在插入片段之前直接作用于现有的DOM。

但是,包含在嵌入式JavaScript中的任何函数确实会变成可用,以便在HTML/ DOM片段和DOM上执行操作,如果后来调用的话。调用此类函数的第一个机会是在.ajax()成功处理程序(或链式.done()处理程序)中。

除非采取非常(并且可能是混乱的)措施,否则成功处理程序(或它调用的任何函数)将需要事先“知道”以这种方式交付的任何函数的名称,否则(实际上)它们将是不可调用的。

我不确定在$(function() {...});结构内交付的代码,它可能会在当前事件线程完成(?)时执行。如果是这样,那么它可能会作用于所传递的HTML/DOM-fragment。一定要试一下。

考虑到所有这些,尝试以下方法,在响应中使用适当的JavaScript短语。

代码语言:javascript
复制
function getLocalPage(url, callback) {
    $.ajax({
        url: url,
        dataType: 'html',
        success: function(data) {
            callback($(data).find('.tileContent'));
        }
    });
}

或者更好:

代码语言:javascript
复制
function getLocalPage(url, callback) {
    $.ajax({
        url: url,
        dataType: 'html'
    }).done(function(data) {
        callback($(data).find('.tileContent'));
    });
}

备注:

  • I将.filter()更改为.find(),这似乎更合适,但您可能需要将其改回来。
  • 您的最终版本可能有更多的.ajax()选项。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15848291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档