ajax的新手,很抱歉提出这样一个基本问题。我正在使用ajax
:
目前,步骤1和2已完成,但当浏览器尝试重定向时,我得到了405 error
。我很感激任何建议。
<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>
$('.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');
}
});
});
表单firebug
,我可以告诉计算结束并生成输出页面。
这是我得到的地方405 error
。所以我的猜测是ajax
没有将浏览器重定向到“正确”的输出页面,而是让浏览器转到通用浏览器。所以没有数据支持,我得到405 error
。
所以我的问题似乎是如何将浏览器重定向到位置###note 1
的{{1}}生成的输出页面。
我附加了一个“工作”方案,但这不是真正的###note 2
方法,因为我使用.submit()来发送表单。
ajax
<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>
我尝试通过将其发布到控制台来检查 form.submit();
$.ajax({
type: "post",
url: "/geneec_batchoutput.html",
success: function () {
window.location = '/geneec_batchoutput.html';
}
});
的内容。看起来url
具有我需要的一切,即输出页面。所以我暂时使用url
来替换当前页面内容。但网址仍为$("body").html(url);
。有没有办法更新网址?
/geneec_batchinput.html
谢谢!
答案 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,但其他类似的问题却没有。