javascript 函数未被调用
在 Django 模板中,我有一个函数
function show_graph(i){
$("#"+i+"seegraph").click(function(){
$("#"+i+"graph").show();
var qaa = {{ question_ids }};
var qid = qaa[i-1];
jQuery.ajax({
url: "/canvas/recreatechart/",
type: "get",
data: {qid: qid },
success: function(response){
var resp = jQuery.parseJSON(response);
alert("chart1"+i);
show_graph("chart1"+i, resp['chart_type'], resp['series_names'], JSON.stringify(resp['data1']), resp['answer'], resp['stories1'], resp['colors'], resp['stacked'], resp['title1']);
show_graph(resp['second_graph']+i,resp['chart_type'], resp['series_names'], resp['data2'], resp['answer'], resp['stories2'], resp['colors'], resp['stacked'], resp['title2']);
}
});
});
}
,并且 show_graph 内部立即出现一个警报,从中我推断出 show_graph 没有被调用,但我不知道原因。
我的控制台中没有任何错误,当我尝试逐个警告第一次调用中的每个参数时,它们都按预期显示,尽管“data1”显示为“object Object”,类型为“object”(当我将 data1 字符串化时,它按预期显示,尽管我不知道这是否意味着什么)。
请注意,data1 是一个字典数组,其值是数组的数组。因此,有点复杂,我不确定 js 是否可以解析结构。
这就是我的函数没有被调用的原因吗?如果不是,那是什么?如果是这样,我该如何修复它(假设这是我必须传递数据的格式)。我怎样才能找到问题?
编辑:我还想指出,我刚刚测试了一些简单的东西,比如用 [5] 代替 data1,因为我担心这会搞乱函数调用,但我仍然没有收到 show_graph 的警报,所以我认为这毕竟不是问题所在。
您已位于名为
show_graph
的函数内。它不会调用您想要的函数,而是调用自身,并向不匹配任何内容的 jquery 选择器添加另一个点击操作。因此,重命名您的内部函数,一切都会正常工作。
您是否有多个名为
show_graph()
的函数?该函数是否打算在 ajax 成功回调中调用自身?
您发布的函数有一个参数
i
:
function show_graph(i){ ... }
在函数中,您似乎将
i
视为数字,例如,在您说
qaa[i-1]
的地方。但是在 ajax 调用中,您的成功回调会像这样调用
show_graph
:
show_graph("chart1"+i, resp['chart_type'], resp['series_names'], JSON.stringify(resp['data1']), resp['answer'], resp['stories1'], resp['colors'], resp['stacked'], resp['title1']);
我不知道您是否打算让它调用自身,但您传递的不是单个数字参数,而是许多参数。 (当然,如果您使用
arguments
对象,JavaScript 允许您这样做,但是在您的情况下,您传递了一个字符串作为第一个参数,但正如我上面所说,该函数将其视为数字。)
一些想法...
您的函数
show_graph(i)
需要一个参数。按照您在选择器中使用它的方式(例如
$("#"+i+"seegraph")
),我们可以假设
i
指的是字符串或数字。稍后,您将向
show_graph
发送一个列表来代替
i
,方法是调用:
show_graph("chart1"+i, resp['chart_type'], resp['series_names'], JSON.stringify(resp['data1']), resp['answer'], resp['stories1'], resp['colors'], resp['stacked'], resp['title1']);
听起来您可能在某个地方有另一个需要显示图表的函数(也许是第二个
show_graph
,而此函数
创建
图表?