【问题标题】:$.ajax() with django fails$.ajax() 与 django 失败
【发布时间】:2025-12-30 14:35:11
【问题描述】:

我正在尝试使用 jquery ajax 从 django(开发服务器)获取一个静态文件(一个 js 脚本),但有些东西阻止了 $.ajax 的承诺解决。

这是我的 ajax 调用:

    $.when(
        $.ajax({dataType: "script", cache: true, url: "/static/ajax_upload/js/jquery.iframe-transport.js"}),
        $.ajax({dataType: "script", cache: true, url: "/static/ajax_upload/js/ajax-upload-widget.js"})
    ).then(function() {
        console.log( "Load was performed." );
        AjaxUploadWidget.autoDiscover();
        $("#level-modal").foundation("reveal", "open");
    }, function () { alert("An error occured, try reloading the page."); });

then 函数中没有任何内容被调用,成功或失败。

奇怪的是,与来自谷歌的文件相同的 ajax 调用有效:

    $.when(
        $.ajax({dataType: "script", cache: true, url: "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"}),
        $.ajax({dataType: "script", cache: true, url: "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"})
    ).then(function() {
        console.log( "Load was performed." );
        AjaxUploadWidget.autoDiscover();
        $("#level-modal").foundation("reveal", "open");
    }, function () { alert("An error occured, try reloading the page."); });

我认为我的响应标头可能有问题,但我的状态为 200,而且我不是 Http 专家。

来自 django 的回应:

HTTP/1.0 200 OK
Date: Sat, 24 Jan 2015 22:57:35 GMT
Server: WSGIServer/0.1 Python/2.7.3
Last-Modified: Sat, 24 Jan 2015 18:45:52 GMT
Content-Length: 9476
Content-Type: application/javascript

来自谷歌的回应:

access-control-allow-origin:*
alternate-protocol:443:quic,p=0.02
cache-control:public, max-age=31536000
content-encoding:gzip
content-length:29524
content-type:text/javascript; charset=UTF-8
date:Sat, 24 Jan 2015 22:57:38 GMT
expires:Sun, 24 Jan 2016 22:57:38 GMT
last-modified:Fri, 19 Dec 2014 15:56:50 GMT
server:sffe
status:200 OK
timing-allow-origin:*
vary:Accept-Encoding
version:HTTP/1.1
x-content-type-options:nosniff
x-xss-protection:1; mode=block

【问题讨论】:

  • 您可以使用$.getScript() 独立提出这两个请求吗?我认为 dataType 脚本有一些失败/错误警告。请参阅$.ajax docs
  • 我检查了 jquery 中的 $.getScript() 代码,它是一个带有 dataType 脚本的 $.ajax 调用。我试过了,但结果是一样的。我还尝试了没有 $.when 的独立调用,只使用了 $.ajax().done().fail().always() 但结果相同:django 没有任何反应,它适用于 google
  • 对,所有使用$.ajax 的速记方法只是好奇是$.when 不起作用还是ajax。不知道为什么它不能在相对路径上工作。
  • 您是否尝试将 content-type 设置为 text/javascript?
  • 是的,没有这样做。

标签: jquery ajax django dajaxice dajax


【解决方案1】:

经过我能想到的一切,
我终于找到了问题。
是 dajaxice。它显然覆盖了 jquery 中的某些内容。
将其注释掉后,我能够得到正常的行为。

我发现使用 jquery 的人可以通过在你的 settings.py 中添加 DAJAXICE_XMLHTTPREQUEST_JS_IMPORT = False 来解决这个问题

【讨论】: