Почему оповещение не запускается, хотя $.getJSON работает нормально? (Обратный вызов не выполняется, хотя запрос отлично работает с getJSON)

У меня есть фрагмент кода, например:

$.getJSON("http://mysite.org/polls/saveLanguageTest?url=" + escape(window.location.href) + "&callback=?",
              function (data) {
          var serverResponse = data.result;
          console.log(serverResponse);
          alert(serverResponse);
}); 

Он отлично работает в том смысле, что делает междоменный запрос на мой сервер, и сервер сохраняет данные, как я и ожидал. К сожалению, несмотря на то, что сервер сохраняет данные и отправляет ответ, я просто не могу получить какое-либо предупреждение или запустить console.log. Почему может быть так? Код на стороне сервера (если это актуально):

def saveLanguageTest(request):
    callback = request.GET.get('callback', '')

    person = Person(firstName = 'Anonymous',
                    ipAddress = request.META['REMOTE_ADDR'])
    person.save()

    webPage = WebPage(url = request.GET.get('url'))
    webPage.save()

    langTest = LanguageTest(type = 'prepositionTest')
    langTest.person = person
    langTest.webPage = webPage
    langTest.save()

    req ['result'] = 'Your test is saved.'
    response = json.dumps(req)
    response = callback + '(' + response + ');'

    return HttpResponse(response, mimetype = "application/json")

Что мне не хватает? (Я пробовал один и тот же код как на своих веб-страницах, так и внутри Firebug, и у меня всегда была проблема, указанная выше.)


person Emre Sevinç    schedule 06.05.2010    source источник
comment
Что вы видите в разделе «Ответ» на панели «Сеть» FireBug   -  person David Perlman    schedule 06.05.2010


Ответы (3)


Вы уверены, что ваш код Django возвращается, а не вызывает исключение? Насколько я вижу, у вас там неверный код - вы ссылаетесь на req['result'] без предварительного определения req.

Как было предложено в комментариях, посмотрите на вкладку Консоль Firebug, чтобы увидеть, что на самом деле возвращается от вашего вызова. Вы можете обнаружить, что на самом деле это страница ошибки Django.

person Daniel Roseman    schedule 06.05.2010

$.getJSON любит тихо терпеть неудачу, когда получает искаженный JSON. Убедитесь, что ваш JSON правильно сформирован, или попробуйте использовать небольшой фрагмент JSON, чтобы заставить его работать. Из руководства:

Важно. Начиная с jQuery 1.4, если файл JSON содержит синтаксическую ошибку, запрос обычно не выполняется. По этой причине избегайте частого ручного редактирования данных JSON. JSON — это формат обмена данными с более строгими правилами синтаксиса, чем у литеральной нотации объектов JavaScript. Например, все строки, представленные в формате JSON, независимо от того, являются ли они свойствами или значениями, должны быть заключены в двойные кавычки. Подробнее о формате JSON см. на странице http://json.org/.

person karim79    schedule 06.05.2010
comment
Я бы дважды проверил, чтобы убедиться, что json правильно сформирован - person lomaxx; 06.05.2010

мой плохой' я забыл добавить

req = {}

до

req ['result'] = 'Your test is saved.'

(И еще одна ошибка с моей стороны заключалась в реализации функции обработки ошибок для обратного вызова, если это вообще возможно для функций JSONP по умолчанию в jQuery).

person Emre Sevinç    schedule 06.05.2010