【问题标题】:Get then writeln获取然后写入
【发布时间】:2013-07-22 20:53:33
【问题描述】:

[尝试 1]

<script>
var example = $.get("example.html");
document.writeln(example);
</script>

我希望将源文件嵌入为原始文本(不是标记)。这甚至没有接近工作。

感谢大家迄今为止的帮助和意见!

[尝试 2/3]@JasonP

...
<script>
$(document).ready(function () {
    $.get("example.html").done(function (result) {
        $('#SomeElement').text(result);
    });
});
</script>
...
<a id="SomeElement" />
...

不过,在尝试 3 时,我仍然没有从中得到任何东西。不过,我理解“准备好了”。

【问题讨论】:

  • name 应该是id
  • 我更新了我的答案。当您编辑问题时,发布答案的人不会自动收到通知,因此请务必评论他们的答案或直接向他们发表评论,如下所示:“@JasonP 嘿,看看我!”

标签: jquery html ajax text


【解决方案1】:

您说您想要原始文本而不是标记。我假设您的意思是您希望“&lt;span&gt;text&lt;/span&gt;”在页面上显示为“&lt;span&gt;text&lt;/span&gt;”,而不是包含文本“text”的跨度。如果这是真的,这应该将结果写成文本而不是 html:

$.get("example.html").done(function(result) {
    $('#SomeElement').text(result);
});

您的示例不起作用,因为 $.get 是异步的。 ajax 请求被发送出去,然后继续执行,document.writeln() 行运行,但没有打印任何内容,因为我们还没有 ajax 调用的结果。我的示例使用了 done() 函数,该函数在 ajax 函数返回结果后执行。

编辑根据您的问题编辑:

两件事。

首先,# 选择器用于元素 ids:

<a id="SomeElement" />

其次,确保将代码包装在准备好的处理程序中,以便在尝试访问它时确保元素存在:

$(document).ready(function() {
    $.get("example.html").done(function(result) {
        $('#SomeElement').text(result);
    });    
});

【讨论】:

  • Phil 也没有使用结果处理程序。在这种情况下,$.get 是异步调用。他只需打印出方法返回的任何内容,而无需等待数据返回
  • @user2409138 添加了说明。
  • @JasonP 非常感谢在 getRdun 之前一直陪着我,不知道我现在在哪里。
  • @PhilAndy 此时,您的代码看起来不错,是时候进行调试了。在查看您的网站时,在浏览器中按 F12 以调出开发工具,然后刷新页面。在控制台选项卡/部分查找任何错误,并在网络选项卡/部分查找任何错误。如果没有错误,请在“网络”选项卡上查找 ajax 请求,并确保响应是您期望看到的。
  • @JasonP Uncaught ReferenceError: $ is not defined
【解决方案2】:

$.get 是异步的。也就是说,您不能同步写入 Ajax 调用的结果(除非使用非异步 ajax,但这很难看并且经常冻结浏览器 UI)。此外,$.get 返回一个与$.Deferred 接口兼容的jqXHR object。您应该将成功回调传递给$.get 或附加Deferred.done 处理程序。

<div id="dynamicContent"></div>
<script>
//passing a callback function to $.get:
$.get("example.html", function(data) {
    $('#dynamicContent').text(data);
});
</script>

另一种方法,将完成回调附加到延迟实例:

$.get("example.html").done(function(data) {
    $('#dynamicContent').text(data);
});

您需要使用.text() 将接收到的响应设置为#dynamicContent 元素的文本内容。 .text() 会将响应附加为文本节点,因此它不会被解释为 HTML。

【讨论】:

  • 嗯,我应该更加关注这个问题,谢谢@Connor
【解决方案3】:

试试:

$("body").text(example)

writeIn() 不是最好的方法。

【讨论】:

  • 这也将呈现为 HTML,而不是原始文本。
  • 是的,还有一个小问题,.get() 没有同步返回响应,而是一个 jqHXR 对象(您可以查看我的答案了解详细信息)。 :P
  • 是的,我看到了你的回答并 +1 了。如果我必须将它添加到我的中,我只会骑着你的波浪,所以我离开了它。好答案:)
【解决方案4】:

您可以尝试将它附加到您的 html 文件的子文件中,像这样

$.get("example.html", function(data){
$('body').text(data);
});

它会添加到你的身体上。 (我在 Connor 和 Kevin B 的帮助下进行了编辑)。虽然,Jason P 给出了一个很好的答案。

【讨论】:

  • this 在该上下文中不是 DOM 节点,它是 ajax 请求生成的选项。
  • 也许你应该把它改成$('body').text(data); 那么它是正确的,你可能会得到一些选票
  • @carlos 我身上有多个 div。您将如何关注该输出?
  • 很抱歉我的答案已被编辑。要专注于 div,您将不得不使用 Jason P 所说的内容。使用 div 的 id,您必须使用 $('#id').text(data); 调用它我看到您在未捕获的参考中遇到错误。我真的不知道那会是什么。
猜你喜欢
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多