Django says is_ajax is false on a JQuery AJAX request

后端 未结 2 639
心在旅途
心在旅途 2020-12-06 16:45

Context: a chrome browser extension uses JQuery to request a response from a remote django app. Django recognizes that the request is made via AJAX and resp

2条回答
  •  情深已故
    2020-12-06 17:40

    Going through the jQuery source, it looks like $.ajax() (and therefore $.get(), $.post(), etc) will automatically set the crossDomain option to true if it sees that you're making a cross-domain request, which you are (relevant code here). And in the actual AJAX request, jQuery won't set the HTTP_X_REQUESTED_WITH header that Django needs for is_ajax() if crossDomain is set (relevant code here).

    I think the easiest way to fix this is to explicitly set crossDomain to false:

    function xhrconnect() {
        $.ajax({
            url: "http://localhost:8000/xhr_test", 
            success: function(data) {
                document.getElementById('xhrmsg').innerHTML = (data);
            },
            crossDomain: false
        });
    }
    

    If that doesn't work, you could try using an AJAX prefilter function to manually set the HTTP_X_REQUESTED_WITH header on the request.

提交回复
热议问题