【问题标题】:getJSON inside a function causing an infinite loop函数内的getJSON导致无限循环
【发布时间】:2011-11-29 15:20:09
【问题描述】:

我正在开发一个 Codeigniter 应用程序,并在一个页面中使用 jQuery 对控制器内的函数进行 Ajax 调用。我将一些取自页面的值传递给这个函数;该函数进行一些计算,然后我必须显示结果。所有这些都无需刷新页面。

ajax 代码是这样的:

$.getJSON("photos/change_product", {product_id: product_type, ajax: 'true'}, function(data) {
        var options = [];
        for (var i = 0; i < data.length; i++) 
    {
        options.push('<option value="' + data[i].id + '">' + data[i].label + '</option>');
    }
    $("select#options").html(options.join(''));
    })
};

当我从某个 html 元素上的点击事件触发它时,它工作得很好。问题是我第一次加载页面时也需要它运行。所以我想我可以将该代码移动到一个函数中,然后在需要的地方调用它。所以,我用上面的代码创建了一个 changeProduct 函数,然后像这样调用它:

$(document).ready(function() {

function changeProduct(product_type) {

    $.getJSON("photos/change_product", {product_id: product_type, ajax: 'true'}, function(data) {
        var options = [];
        for (var i = 0; i < data.length; i++) 
    {
        options.push('<option value="' + data[i].id + '">' + data[i].label + '</option>');
    }
    $("select#options").html(options.join(''));
    })
};

var selected_product = $("ul#products li:first-child a");
changeProduct(selected_product);

这会导致页面刷新无限循环。我怎样才能避免这种情况?我应该创建计数器和条件句还是有更好的方法?

已解决:问题出在 selected_product 变量中。应该是这样的:

var selected_product = $("ul#products li:first-child a").val();

【问题讨论】:

  • 如果您将函数移出 document.ready,但改为调用 document.ready 中的函数,会发生什么情况?
  • 我已经试过了。它发生同样的事情。问题出在电话上。
  • 奇怪,因为你所做的只是创建一个数组,加入它并将它插入到选择标签中!您的控制台中没有任何 javascript 错误吗?尝试持久化控制台 - 它可能会点击页面、出错并以某种方式刷新
  • 您是否使用 firebug 或类似的调试工具?这可以帮助您确定 pb 在哪里
  • 是因为'selected_product'是一个jquery对象吗?你想改用 $("ul#products li:first-child a").text() 之类的东西吗?

标签: jquery ajax json infinite-loop


【解决方案1】:

是因为 'selected_product' 是一个 jquery 对象吗?您是否想执行类似 $("ul#products li:first-child a").text() 之类的操作来获得它的价值?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2021-06-10
    相关资源
    最近更新 更多