为什么即使$ .getJSON运行正常也不会运行警报? (回调未执行,即使请求与getJSON一起工作正常)

时间:2010-05-06 10:07:59

标签: jquery django jsonp

我有一段代码,例如:

$.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 个答案:

答案 0 :(得分:3)

$.getJSON喜欢在收到格式错误的JSON时无声地失败。检查您的JSON是否格式正确,或者尝试使用一小段JSON来使其正常工作。来自manual

  

重要:从jQuery 1.4开始,如果JSON文件包含语法错误,   请求通常会失败   默默。避免频繁的手工编辑   由于这个原因,JSON数据。 JSON是   具有语法的数据交换格式   比那些更严格的规则   JavaScript的对象文字符号。   例如,表示所有字符串   在JSON中,它们是否属性   或值,必须包含在内   双引号。有关JSON的详细信息   格式,请参阅http://json.org/

答案 1 :(得分:2)

你确定你的Django代码正在返回,而不是引发异常吗?据我所知,您的代码无效 - 在没有先定义req['result']的情况下引用req

根据评论中的建议,查看Firebug的控制台选项卡,了解您的通话实际返回的内容。你可能会发现它实际上是一个Django错误页面。

答案 2 :(得分:0)

我的坏'我忘了添加

req = {}

之前

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

(另一个失败是我为回调实现了一个错误处理函数,如果这对jQuery的默认JSONP功能完全可行的话。)