Почему мой ответ jQuery.ajax пуст с Django - PullRequest
4 голосов
/ 26 августа 2009

Я пытаюсь вернуть ответ JSON от вызова представления Django через вызов ajax, как показано ниже:

var tab = 'test';
var response = $.ajax({
    url: "/" + tab + "/"
}).responseText;

alert(response);

Вот мой взгляд на Джанго:

if request.is_ajax() == True:
    req = {}
    req['html'] = '<b>This is a test</b>'
    response = simplejson.dumps(req)
    print response
    return HttpResponse(response, mimetype="application/json")
else:
    return render_to_response("ajax/pingpong.html", {'ajax': ajax})

По какой-то странной причине окно предупреждения пустое (хотя в нем не указано неопределенное). Интересно, что $ .post и $ .getJSON отлично работают на одном и том же URL. Я также вижу ожидаемый вывод JSON на моей консоли. Любая помощь будет оценена!

Ответы [ 5 ]

2 голосов
/ 26 августа 2009

Вы не устанавливаете параметр dataType на json, и вам нужно получить объект json из функции успеха, попробуйте следующее:

var tab = 'test';
$.ajax({
    url: "/" + tab + "/",
    dataType: "json",
    success: function(json){
        alert(json);
    }        
});
1 голос
/ 26 августа 2009

Попробуйте вместо этого:

var tab = 'test';
var response = $.ajax({
    url: "/" + tab + "/",
    success: function(data, textStatus) { alert(data); }
});
1 голос
/ 26 августа 2009

Хотя в документации утверждается, что ResponseText будет блокировать браузер до тех пор, пока запрос не будет завершен, мне кажется, что вы получаете состояние гонки, т.е. ваше предупреждение переменной до завершения запроса XHR. Вам придется сделать что-то вроде этого:

var complete = function(data) {
    console.log(response.responseText);
}
var tab = 'test';
var response = $.ajax({
    url: "/" + tab + "/",
    dataType: "json",
    success : complete
});
1 голос
/ 26 августа 2009

Если я не ошибаюсь, responseText не является атрибутом того, что $.ajax() возвращает. Я думаю, что вы должны сделать что-то вроде этого:

$.ajax({
  url: "/test",
  dataType: "json",
  success: function(data) {
    // use data
  }
});

Из-за параметра dataType данные, полученные для обратного вызова success, являются обычным объектом JS. Если вы не укажете dataType, вы получите строку с необработанным содержимым, которое возвращает сервер.

0 голосов
/ 10 марта 2010

У меня та же проблема, но только в определенной среде. Мне интересно, если ваша проблема такая же. Моя среда:

  1. Запуск внутреннего веб-сервера Django (./manage.py runserver 0.0.0.0:8080)
  2. Просмотр моего сайта в Google Chrome (v4.1.249.1025).

При таких обстоятельствах следующий код jQuery приводит к тому, что данные = null, status = "success" примерно в половине случаев. В остальное время он возвращает действительный объект для данных.

$.ajax({
   type:"POST",
   url:"response/"+q.id+"/",
   cache:false,
   dataType:"json",
   data:{response:$(this).val()},
   success:function(data, status) {
     alert(data+","+status);
   }, 
   error:function() {
     $(".main_container").text("Error. Please check your internet connection.");
   } 
});
...