функция JavaScript не вызывается - PullRequest
2 голосов
/ 17 ноября 2011

В шаблоне 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»с типом «объект» (когда я строковые данные1, это получилось, как и ожидалось, хотя я не знаю, означает ли это что-нибудь).

Обратите внимание, что data1 представляет собой массив словарей, значения которыхявляются массивами массивов.Итак, немного сложнее, и я не уверен, что js может разобрать структуру.

Поэтому моя функция не вызывается?Если нет, то что это?Если так, как я могу это исправить (учитывая, что это формат, в котором я должен передавать свои данные).Как я могу найти проблему?

РЕДАКТИРОВАТЬ: Я также хотел бы отметить, что я только что протестировал что-то простое, как [5] вместо data1, поскольку я боялся, что испортил вызов функции, ноЯ все еще не получаю оповещения от show_graph, так что я думаю, что это не все-таки.

Ответы [ 5 ]

3 голосов
/ 17 ноября 2011

Вы уже находитесь внутри функции с именем show_graph. Вместо того, чтобы вызывать нужную функцию, она вызывает сама себя и добавляет еще одно действие щелчка в ... селектор jquery, который ничего не соответствует. Поэтому переименуйте свою внутреннюю функцию, и все должно работать.

2 голосов
/ 17 ноября 2011

У вас есть более одной функции с именем show_graph()?Является ли намерение для функции вызывать себя из обратного вызова ajax success?

Функция, которую вы опубликовали, имеет один параметр: 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']);

Я не знаю, намеревались ли вы вызывать саму себя, но вы не передаете ни одного числового параметраПередаешь много параметров.(Конечно, JavaScript позволяет вам делать это, если вы используете объект arguments, но в вашем случае вы передаете строку в качестве первого аргумента, но, как я уже говорил выше, функция обрабатывает его как число.)

1 голос
/ 17 ноября 2011

Несколько мыслей ...

Ваша функция 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']);

Похоже, у вас где-то есть другая функция, которая нуждается впоказать график (возможно, 2-й show_graph, в то время как эта функция создает график?

0 голосов
/ 17 ноября 2011

Я думаю, что проблема в том, что show_graph прикрепляет событие click к элементу

Когда происходит событие click, вызывается обратный вызов для click, который выполняет вызов ajax.

В успешномВызов ajax, вы снова вызываете show_graph, ожидая, что он будет полностью выполнен, но не выполняет.Он просто присоединяет другой прослушиватель события щелчка (учитывая, что элемент найден)

Таким образом, ваш show_graph не должен связывать событие щелчка.

0 голосов
/ 17 ноября 2011

Возможно, ваш Ajax выходит из строя (по одной из многих возможных причин), и поэтому он не вызывает обратный вызов успеха? Попробуйте добавить error: обратный вызов, чтобы увидеть, вызывается ли он.

Что касается бита [object Object], то это побочный эффект объектов оповещения. alert () преобразует свои аргументы в строки, а метод Object toString по умолчанию возвращает значение "[object Object]". Используйте console.log (или непосредственно проверьте значения в отладчике), чтобы избежать этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...