Почему предупреждение не запускается, хотя $ .getJSON работает нормально? (Обратный вызов не выполняется, даже если запрос работает нормально с getJSON) - PullRequest
1 голос
/ 06 мая 2010

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

$.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, и у меня всегда была проблема, указанная выше.)

Ответы [ 3 ]

3 голосов
/ 06 мая 2010

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

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

2 голосов
/ 06 мая 2010

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

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

0 голосов
/ 06 мая 2010

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

req = {}

до

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

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

...