Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Django+;Ajax |文件上传|服务器不';无法识别Ajax请求_Javascript_Jquery_Python_Ajax_Django - Fatal编程技术网

Javascript Django+;Ajax |文件上传|服务器不';无法识别Ajax请求

Javascript Django+;Ajax |文件上传|服务器不';无法识别Ajax请求,javascript,jquery,python,ajax,django,Javascript,Jquery,Python,Ajax,Django,我正试图通过Django使用ajax实现文件上传,但遇到了一些问题 当用户在选择文件并提交表单后尝试上载文件时,根据我的理解,应使用POST方法向服务器发送ajax请求,但在我的情况下,会向服务器发出POST请求,但服务器无法将其识别为ajax请求,浏览器被重定向到http://:/upload/,此页面上的内容如下所示 {"status": "error", "result": "Something went wrong.Try Again !!"} Django版本:1.6.2 Pytho

我正试图通过Django使用ajax实现文件上传,但遇到了一些问题

当用户在选择文件并提交表单后尝试上载文件时,根据我的理解,应使用
POST
方法向服务器发送ajax请求,但在我的情况下,会向服务器发出
POST
请求,但服务器无法将其识别为ajax请求,浏览器被重定向到
http://:/upload/
,此页面上的内容如下所示

{"status": "error", "result": "Something went wrong.Try Again !!"}
Django版本:1.6.2

Python版本:2.7.5

另外,在Django开发服务器上进行测试

视图.py

def upload(request):
        logging.info('Inside upload view')
        response_data = {}
        if request.is_ajax():
                logging.info('Is_AJAX() returned True')
                form = UploaderForm(request.POST, request.FILES)

                if form.is_valid():
                        logging.info('Uploaded Data Validated')
                        upload = Upload( upload=request.FILES['upload'] )
                        upload.name = request.FILES['upload'].name
                        upload.save()
                        logging.info('Uploaded Data Saved in Database and link is %s' % upload.upload)

                        response_data['status'] = "success"
                        response_data['result'] = "Your file has been uploaded !!"
                        response_data['fileLink'] = "/%s" % upload.upload

                        return HttpResponse(json.dumps(response_data), content_type="application/json")

        response_data['status'] = "error"
        response_data['result'] = "Something went wrong.Try Again !!"

        return HttpResponse(json.dumps(response_data), content_type='application/json')
模板

<form id="uploadForm" action="/upload/" method="post" enctype="multipart/form-data">
                {% csrf_token %}
<input id="fileInput" class="input-file" name="upload" type="file">
<input type="submit" value="Post Images/Files" />
</form>
Javascript 2

var options = {
      url: '/upload/',
      type: "POST",
       error: function(response) {
               alert('Something went Wrong. Try Again');
        },
        success: function(response) {
            if ( response.status == 'success' ) {
              alert('success');
             }
        }
};

$('#uploadForm').ajaxSubmit(options);
问题:

$('#uploadForm').submit(function(){

        var formData = new FormData($(this)[0]);
        $.ajax({
                url: '/upload/',
                type: 'POST',
                data: formData,
                async: false,
                success: function (data) {
                alert(data)
                },
                cache: false,
                contentType: false,
                processData: false
        });
        return false;
});
1) 为什么Django无法识别ajax请求和
request的值。is_ajax()
总是
False

2) 即使服务器无法识别ajax请求,为什么我的浏览器会被重定向到另一个页面

还有一个类似的问题,但没有结果。

1)为什么_ajax()不起作用? 您是否包含JQuery表单插件(
JQuery.form.js
ajaxSubmit()
需要该插件

看看

如果已经完成了,您可以查看
HTTPRequest
对象

Django文档说
HttpRequest.is\u ajax()
如果请求是通过
XMLHttpRequest
发出的,则返回True。如果您使用一些javascript库来发出ajax请求,那么就不必担心这个问题。您仍然可以使用头验证“
HTTP\u X\u REQUESTED\u”,以查看Django是否收到了
XMLHttpRequest

2) 为什么页面重定向

如上所述,处理ajax请求及其回调需要JQuery表单插件。另外,对于ajaxSubmit(),您需要覆盖$(#uploadForm).submit()


希望这有帮助:)

确保javascript代码块

$('#uploadForm').submit(function(){

    var formData = new FormData($(this)[0]);
    $.ajax({
            url: '/upload/',
            type: 'POST',
            data: formData,
            async: false,
            success: function (data) {
            alert(data)
            },
            cache: false,
            contentType: false,
            processData: false
    });
    return false;
});

在第页的DOM中上载html表单后加载。在您的情况下,您似乎试图将提交处理程序与尚未加载的表单元素绑定,因此当您单击时,它会发送简单的POST请求。

这对我来说很有效。你需要一个


下面是类似的问题和答案。

您是否使用插件通过ajax发送文件?因为如果没有,那可能就是问题所在。另外-你能检查发送的请求的标题并分享详细信息吗?嗨,我不知道为什么它对我仍然不起作用。在问题中的javascript 2中,我使用的是
jquery.form.js
。我尝试了您的代码,但仍然遇到同样的问题。
$('#uploadForm').submit(function(){

    var formData = new FormData($(this)[0]);
    $.ajax({
            url: '/upload/',
            type: 'POST',
            data: formData,
            async: false,
            success: function (data) {
            alert(data)
            },
            cache: false,
            contentType: false,
            processData: false
    });
    return false;
});
$("#uploadForm").submit(function(event) {
    $(this).ajaxSubmit({
        url:'{% url upload_file %}',
        type: 'post',
        success: function(data) {
            console.log(data)
        },
        error: function(jqXHR, exception) {
            console.log("An error occurred while uploading your file!");
        }
    });
    return false;
});