ajax页面重定向405错误

时间:2013-10-21 21:34:03

标签: html ajax forms jquery

ajax的新手,很抱歉提出这样一个基本问题。我正在使用ajax

  1. 提交表格(用python编写)
  2. 进行一些计算并生成输出页面,
  3. 将浏览器重定向到输出页面
  4. 目前,步骤1和2已完成,但当浏览器尝试重定向时,我得到了405 error。我很感激任何建议。

    HTML表单

    <form method="post" id="form1">File to upload:
        <input type="file" id="upfile1" name="upfile" class="required input_button" accept=".csv" />
        <input class="submit_button" type="button" value="Submit" />Upload the file!
    </form>
    

    JS代码

    $('.submit_button').click(function () {
        var form_data = new FormData();
        $.each($('input[name^="upfile"]')[0].files, function (i, file) {
            form_data.append('file-' + i, file);
        });
        $.ajax({
            type: "post",
            url: "/geneec_batchoutput.html", ///////NOTE 1/////////
            data: form_data,
            cache: false,
            contentType: false,
            processData: false,
            success: function () {
                window.location = '/geneec_batchoutput.html'; ///////NOTE 2/////////
            },
            error: function (data) {
                console.log('error');
            }
    
        });
    });
    

    注1

    表单firebug,我可以告诉计算结束并生成输出页面。enter image description here enter image description here

    注2

    这是我得到的地方405 error。所以我的猜测是ajax没有将浏览器重定向到“正确”的输出页面,而是让浏览器转到通用浏览器。所以没有数据支持,我得到405 error

    所以我的问题似乎是如何将浏览器重定向到位置###note 1的{​​{1}}生成的输出页面。

    更新

    我附加了一个“工作”方案,但这不是真正的###note 2方法,因为我使用.submit()来发送表单。

    html表单

    ajax

    JS代码

    <form method="post" id="form1" enctype="multipart/form-data" action=geneec_batchoutput.html>File to upload:
        <input type="file" id="upfile1" name="upfile" class="required input_button" accept=".csv" />
        <input class="submit_button" type="submit" value="Submit" />Upload the file!
    </form>
    

    更新2

    我尝试通过将其发布到控制台来检查 form.submit(); $.ajax({ type: "post", url: "/geneec_batchoutput.html", success: function () { window.location = '/geneec_batchoutput.html'; } }); 的内容。看起来url具有我需要的一切,即输出页面。所以我暂时使用url来替换当前页面内容。但网址仍为$("body").html(url);。有没有办法更新网址?

    /geneec_batchinput.html

    谢谢!

1 个答案:

答案 0 :(得分:0)

看起来location重定向被称为POST请求,因为它位于submit操作中。尝试调整提交处理程序,如下所示:

$('.submit_button').click(function (event) {
    event.preventDefault();
    // carry on...

这样您就可以使用event.preventDefault来避免需要从提交事件中返回一些内容。

更新

这可能就是这样。使用原始代码:

$('.submit_button').click(function (event) {
    event.preventDefault();
    // .. blah blah ..
    $.ajax({
        type: "post",
        url: "/geneec_batchoutput.html", ///////NOTE 1/////////
        // .. blah blah ..
        success: function () {
            window.location = '/geneec_batchoutput.html'; ///////NOTE 2/////////
        },
        error: function (data) {
            console.log('error');
        }
    });
    retun false;
});

因为它是异步的,所以外部事件处理程序在成功回调函数中发出位置更改之前结束。我认为preventDefault会避免返回false,但其他类似的问题却没有。