0

I'm trying to get a static file (a js script) from django (development server) using jquery ajax but something is preventing the $.ajax promise to resolve.

Here's my ajax call :

    $.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."); });

Nothing in the then function is called, success nor failure.

The weird thing is that the same ajax call with files from google works :

    $.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."); });

I think something might be wrong with my responses headers but I get a 200 status and I ain't an expert in Http.

Response from 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

Response from google :

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
PhilipGarnero
  • 2,399
  • 4
  • 17
  • 24
  • can you make both requests independently using `$.getScript()` ? There are some fail/error caveats with dataType script I think. See `$.ajax` docs – charlietfl Jan 24 '15 at 23:30
  • I've checked $.getScript() code in jquery and it's an $.ajax call with dataType script. I tried it but it's the same result. I also tried independant calls without $.when just with $.ajax().done().fail().always() but it's the same result : nothing happens with django, and it works with google – PhilipGarnero Jan 24 '15 at 23:35
  • right, all the shorthand methods use `$.ajax` was just curious if it was the `$.when` not working or the ajax. No idea why it won't work on relative path. – charlietfl Jan 24 '15 at 23:36
  • Have you tried setting the content-type to text/javascript? – thebjorn Jan 25 '15 at 02:15
  • Yes, that didn't do it. – PhilipGarnero Jan 25 '15 at 02:24

1 Answers1

0

After going through everything I could think of,
I finally found the problem.
It was dajaxice. It is apparently overriding some things in jquery.
After commenting it out, I was able to get the normal behavior.

I found out that the problem can be resolved for people using jquery by adding DAJAXICE_XMLHTTPREQUEST_JS_IMPORT = False in your settings.py

PhilipGarnero
  • 2,399
  • 4
  • 17
  • 24