【问题标题】:AJAX success callback - issues executing javascriptAJAX 成功回调 - 执行 javascript 的问题
【发布时间】:2012-08-26 08:49:05
【问题描述】:

当使用 AJAX 在加载时触发 Python 处理程序(在 GAE 中)时,它会正确加载 HTML 模板页面,但由于某种原因,它不会执行模板页面中的 Javascript。它也不会在成功回调函数中返回该 javascript。

这是在加载时触发处理程序的 index.html 文件中的代码:

<div id="daily_emails"></div>

<script>
  $.ajax({
     url: "/gviz",
     cache: false,
     success: function(data){
       $("#daily_emails").html(data);
     }
  }); 
</script>

gviz 处理程序生成一个 html 模板,其中包含一个自定义的 Google 图表工具表。它自己创建它没有任何问题,但是一旦我从另一个 html 文件(如上)调用它,它会剥离 javascript 内容并因此返回纯的、未更改的 html。由于 javascript 代码本身使用模板标签(用于 Google 图表工具中的数据),我不能只从上面的 index.html 文件中运行它。

如果有帮助,我可以发布 gviz 处理程序正在呈现的模板的完整代码。

【问题讨论】:

  • 1) 当您像这样插入响应时会发生什么:$("#daily_emails").text(data)?这应该避免创建 html 实体。 2)为了安全起见,也许也添加一个错误回调,看看是否在某个时候被调用?
  • 您的 GAE 中是否有用于发布和获取请求的处理程序?

标签: javascript ajax google-app-engine


【解决方案1】:

您需要确保在页面准备就绪时进行调用

<script>
$(document).ready(function() {
  $.ajax({
     url: "/gviz",
     cache: false,
     success: function(data){
       $("#daily_emails").html(data);
     }
  });
}); 
</script>

【讨论】:

  • 对不起,我一定误解了你的问题。
  • 将其包装在 ready() 函数中并没有帮助。主要问题是,当模板被渲染时,其中的 javascript 不会执行,因此,当模板中的 html 通过使用成功回调函数传回时,模板中的 html 保持不变.
【解决方案2】:

您使用的是哪种浏览器?浏览器会解析返回的 HTML,并可能去除非法的 HTML。如果返回的 HTML 中有错误,则可能会发生这种情况。如果包含“/gviz”的结果会很有帮助。

由于您返回的模板可能不包含纯有效的 HTML,因此您可能需要返回内容类型设置为“文本/纯文本”的结果,这样浏览器就不会尝试解析它.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多