【发布时间】: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