【问题标题】:jQuery inserting a page into div breaks javascriptjQuery将页面插入div会破坏javascript
【发布时间】:2011-11-24 05:54:21
【问题描述】:

我的 index.php 有一个 jquery ajax 调用,可将 getposts.php 插入我的#content div。这工作正常.. 问题是 getposts.php 中有一些 javascript(更多 jQuery),虽然 Chrome 确实可以正常执行代码,但 Firefox 没有。

如果我将 javascript 作为文件 (setchecked.js) 包含在内,firebug 正在寻找 setchecked.js_=1322020697832

如果我将 javascript 直接包含到 getposts.php 中,则 javascript 将被完全忽略(它甚至不会出现在源代码中)

有谁知道为什么以及如何解决它?

index.php

<script type="text/javascript" src="fetchposts.js"></script>
<div id="content"></div>

fetchposts.js

$(document).ready(function() {
$.ajax({
    url: 'getposts.php',
    type: 'POST',
    success: function (fetched) {
        $('#content').load('getposts.php');
    },
});
});

getposts.php(这会让 firebug 寻找 setchecked.js_=1322020697832

<script type="text/javascript" src="setchecked.js"></script>

或getposts.php(源代码中完全没有javascript)

<script type="text/javascript">
$(document).ready(function() {
// set $checked values
$.ajax({
    url: 'query.php',
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    async: true,
    cache: false,
    success: function (msg) {
        ------ do some fun stuff that works --------
    },
});
});
</script>
         --------------- some php and html that DOES display -------------

同样,我的问题不在于我的 javascript 的内容,而是如何让 javascript 在#content 中工作。 Chrome 确实可以毫无问题地执行代码。出于某种原因,Firefox 很挑剔。 Firebug 没有报告任何错误,只是寻找错误的文件或完全忽略它。

getposts.php 的其余部分(html 和 php 代码)在 Chrome 和 Firefox 中都显示在我的#content 中。

【问题讨论】:

  • 问一个愚蠢的问题:如果您的第一个 Ajax 是调用 PHP 脚本,为什么要尝试包含一些 JavaScript 来运行另一个 Ajax 调用?在getposts.php 中调用query.php 不是更容易吗?
  • 没有。对 query.php 的 ajax 调用从不同的数据库中获取一个数组,并使用该信息执行一些 jQuery,以更改 getposts.php 中某些 div 的类。然后通过对 getposts.php 的 ajax 调用将此输出插入到#content 中。即使我在 getposts.php 中包含 query.php,我仍然需要在其上执行更多 jQuery 来更改 div 类。这让我们回到第一方。如果我将 setchecked.js 中的 javascript 包含到我的 index.php 中,它不会在插入到 #content 的内容上执行,因此 #content 只会包含未修改的 div 类。
  • 您需要从单独的数据库中获取什么?能具体点吗?
  • 我发现了问题!对 getposts.php 的 ajax 调用成功执行 getposts.php 的加载。通过删除 ajax 代码并简单地离开负载,javascript 可以完美运行!

标签: jquery ajax load reload


【解决方案1】:

我知道这些脚本正在运行,但我认为它们需要一些重构。 从代码中我看到你是

  1. 将内容从 getposts.php 加载到 #content 中
  2. 加载后,您想获取一些 JSON
  3. 加载 JSON 后,您想用它做一些有趣的事情

代码可以通过以下方式改进:

  • 没有进行这么多的 ajax 调用
  • 针对每个任务使用专门的 ajax 方法
  • 将它们放在一个文件中

fetchposts.js

$(document).ready(function() {
    var someFunStuff = function(msg) {
        // do some fun stuff that works 
    };

    var setChecked = function() {
        $.getJSON('query.php', someFunStuff);
    };

    $('#content').load('getposts.php', setChecked);
});

如果我误解了您想要完成的事情,或者您有更多需要介绍的规范,请告诉我,我会根据需要回复。

更新

我看到您发表的关于使用单个 javascript 文件的评论。您需要从单独的数据库中获取什么?

【讨论】:

  • 您的回答让我意识到,当我需要的只是没有 ajax 的负载时,我的 ajax 成功执行了负载。只需使用不带 ajax 的 load 即可让 getposts.php 执行其 javascript。
  • 我其实没想到它会自动执行js。 :)
猜你喜欢
  • 2019-05-14
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多