javascript函数没有被调用

时间:2011-11-17 01:57:55

标签: javascript jquery html django-templates django-views

在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的警告,所以我认为毕竟不是。

5 个答案:

答案 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事件。

相关问题