jQuery.getJSON не вызывает обратный вызов - PullRequest
25 голосов
/ 21 февраля 2009

У меня есть HTML-код:

<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), но не нашел ответа.

РЕДАКТИРОВАТЬ: Проблема была в том, что HttpResponse не был импортирован ... К сожалению, Django не дал ошибки об этом. Все остальное было правильно. С уважением
Chriss

Ответы [ 4 ]

47 голосов
/ 21 февраля 2009

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

  • Используйте Firebug для просмотра ответа JSON

  • Настройка обработки ошибок в вашем коде jquery с использованием параметров jQuery.ajaxSetup, таких как:

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

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

РЕДАКТИРОВАТЬ: третий вариант будет просто открыть URL-адрес, который должен генерировать JSON и запустить вывод через JSON Lint , чтобы проверить его.

3 голосов
/ 21 февраля 2009

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

1 голос
/ 24 августа 2010

Я столкнулся с этим некоторое время назад и переписал оболочку для jjuery's Ajax, которая позволяет вам передавать обычный getJSON и дополнительный обратный вызов ошибки для get.

http://www.nurelm.com/themanual/2010/08/09/self-indulgent-code-jquery-getjson-with-error-handling/

0 голосов
/ 28 апреля 2011

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

...