getJSON在函数内导致无限循环

时间:2011-11-29 15:20:09

标签: jquery ajax json infinite-loop

我正在使用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元素上的click事件触发它时,它工作得很好。问题是我第一次加载页面时也需要它运行。所以我认为我可以将该代码移动到一个函数中,然后在我需要的地方调用它。所以,我用上面的代码创建了一个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();

1 个答案:

答案 0 :(得分:2)

是因为'selected_product'是一个jquery对象吗?你想做一些像$(“ul#products li:first-child a”)。text()来取得它的价值吗?