开发者问题收集

javascript 函数未被调用

2011-11-17
948

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

3个回答

您已位于名为 show_graph 的函数内。它不会调用您想要的函数,而是调用自身,并向不匹配任何内容的 jquery 选择器添加另一个点击操作。因此,重命名您的内部函数,一切都会正常工作。

2011-11-17

您是否有多个名为 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 允许您这样做,但是在您的情况下,您传递了一个字符串作为第一个参数,但正如我上面所说,该函数将其视为数字。)

nnnnnn
2011-11-17

一些想法...

您的函数 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 ,而此函数 创建 图表?

Chazbot
2011-11-17