在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”显示为“对象对象”,其类型为“对象”(当我对数据进行字符串化时,它按预期出现,虽然我不知道这是否意味着什么)。
请注意,data1是一个字典数组,其值是数组数组。所以,有点复杂,我不确定js是否可以解析结构。
这就是我的功能没被调用的原因吗?如果没有,那是什么?如果是这样,我该如何修复它(假设这是我必须传递数据的格式)。我怎样才能找到问题?
编辑:我还要注意,我刚刚测试了一些像[5]这样的简单代替data1的东西,因为我担心这会弄乱函数调用,但我仍然没有收到show_graph的警告,所以我认为毕竟不是。答案 0 :(得分:3)
您已经在名为show_graph
的函数内部。它不是调用你想要的函数,而是调用自己,并添加另一个单击操作给...一个与任何东西都不匹配的jquery选择器。所以重命名你的内部功能,一切都应该有效。
答案 1 :(得分:2)
您是否有多个名为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允许您这样做,但在您的情况下,您将传递一个字符串作为第一个参数,但正如我上面所说,该函数将其视为一个数字。)
答案 2 :(得分:1)
一些想法......
你的函数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
,而此函数创建图形?
答案 3 :(得分:0)
也许你的Ajax失败了(出于很多可能的原因之一),所以它没有调用成功回调?尝试添加error:
回调以查看是否已调用。
对于[object Object]
位,这是警报对象的副作用。 alert()将其参数转换为字符串,默认的Object toString方法返回"[object Object]"
。使用console.log(或直接检查调试器中的值)以避免此问题。
答案 4 :(得分:0)
我认为问题是,show_graph将click事件附加到元素
当click事件发生时,将调用click的回调,执行ajax调用。
在成功的ajax调用中,再次调用show_graph,期望它完全执行,但不会。它只是附加了另一个单击事件监听器(考虑到找到一个元素)
因此,您的show_graph不应绑定click事件。