2009-02-21 3 views
25

У меня есть HTML код:jQuery.getJSON не вызывает функцию обратного вызова

<button>asd</button> 
<script type = "text/javascript"> 
$('button').click(
    function() { 
     $.getJSON('/schedule/test/', function(json) { 
      alert('json: ' + json + ' ...'); 
     }); 
    } 
); 
</script> 

и соответствующий вид:

def test(request): 
    if request.method == 'GET': 
     json = simplejson.dumps('hello world!') 
     return HttpResponse(json, mimetype = 'application/json') 

Вид выполняется (проверено с помощью print), json переменная инициализируется, но не появляется предупреждение. Что я сделал не так? Я уже видел некоторые документы по этому поводу (например, http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback), но я не нашел ответа.

EDIT: проблема заключалась в том, что HttpResponse не был импортирован ... К сожалению, Django не дал об этом никаких ошибок. Все остальное было правильным. приветствует
chriss

+0

У вас есть резервное копирование и пробовал это как обычный текст только для пинков? – Sampson

ответ

47

Скорее всего, json неправильно сформирован. Иногда это случается со мной, когда мой код, который должен производить json, вызывает ошибку. Два варианта:

  • Используйте поджигатель, чтобы просмотреть ответ JSON

  • ошибка настройки обработки в коде Jquery с помощью опции jQuery.ajaxSetup, такие как:

    $.ajaxSetup({"error":function(XMLHttpRequest,textStatus, errorThrown) { 
         alert(textStatus); 
         alert(errorThrown); 
         alert(XMLHttpRequest.responseText); 
        }}); 
    

Использование обработка ошибок для отладки велик, так как вы сразу узнаете, когда возникнет проблема с вашим ответом. Вы можете проверить jQuery documentation for jQuery.ajax, который имеет все доступные параметры для jQuery.ajaxSetup.

EDIT: Третий вариант заключается в том, чтобы просто открыть URL-адрес, который должен генерировать JSON, и выполнить вывод через JSON Lint, чтобы проверить его.

+0

Не могли бы вы указать мне или объяснить, как проверить JSON с FireBug? – chriss

+1

Несомненно. Я предполагаю, что у вас установлен FireBug в FF, дайте мне знать, если вы этого не сделаете. FireBug отслеживает весь ваш запрос ajax на вкладке XHR. Разверните запрос там и нажмите на вкладку «ответ». Вы увидите там JSON или другой текст ответа. Удачи! – jonstjohn

+0

Вам нужно закрыть еще одну фигурную скобку в коде, который вы указали. –

3

Вы уверены, что JSON действительно? взгляните на ответ напрямую или используйте Firebug

0

Я думаю, что вам не хватает трейлинг $ в шаблон URL.

Смежные вопросы