【问题标题】:Why is alert not run even though $.getJSON runs fine? (Callback not executed, even though the request works fine with getJSON)为什么即使 $.getJSON 运行良好,警报也不会运行? (回调未执行,即使请求使用 getJSON 工作正常)
【发布时间】:2010-05-06 18:19:34
【问题描述】:

我有一段代码,例如:

$.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 中都尝试了相同的代码,但我总是遇到上述问题。)

【问题讨论】:

  • 您在 FireBug 的网络面板的响应部分看到了什么

标签: jquery django jsonp


【解决方案1】:

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

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

【讨论】:

  • 我会仔细检查以确保 json 格式正确
【解决方案2】:

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

按照 cmets 中的建议,查看 Firebug 的“控制台”选项卡以查看您的调用实际返回的内容。你可能会发现它实际上是一个 Django 错误页面。

【讨论】:

    【解决方案3】:

    我的错'我忘记添加了

    req = {}
    

    之前

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 2012-05-26
      • 2011-08-22
      相关资源
      最近更新 更多