html:
<formid="mainForm"action="~/E2ENewsAnswerSBSReview/TaskFilesReview"method="post"enctype="multipart/form-data">
<div>
<inputtype="file"name="fileInput"/>
<inputtype="submit"id="submit"value="Submit"/>
<inputtype="button"id="btnGo"value="GO"/>
</div>
<divid="messageBox">
</div></form>
button 提交
$("#btnGo").click(function () {
alert("hello~ world!");
$.ajax({
url:
"TaskFilesReview",
type:
"post",
datatype:
"JSON",
data: $(
"#mainForm").serialize(),
timeout: 600000,
success:
function (data) {
//data.Message = data.Message.replace(/(?:\r\n|\r|\n)/g, '<br />');
if (data.Success) {
alert("Upload data success!");
}
else { result.errorFree =false;
}
},
error:
function (request, status, error) {
$(
"#messageBox").text(request.responseText).css({ "color": "red" });
result.errorFree =
false;
}
});
})
submit 提交:
$(
"#submit").click(function () {
if (toValid()) {
$(
"#messageBox").text("");
$.ajax({
url:
this.action,
type:
this.method,
datatype:
"JSON",
data: $(
"#mainForm").serialize(),
timeout: 600000,
success:
function (data) {
//data.Message = data.Message.replace(/(?:\r\n|\r|\n)/g, '<br />');
if (data.Success) {
alert(
"Upload data success!");
}
else {
result.errorFree =
false;
}
},
error:
function (request, status, error) {
$(
"#messageBox").text(request.responseText).css({ "color": "red" });
result.errorFree =
false;
}
});
}
})
后台:
publicActionResult TaskFilesReview()
{
var ret = newActionReturn();
//var ret = new JsonResult();
string tempPath = System.AppDomain.CurrentDomain.BaseDirectory;
try
{
HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
if (files.Count <= 0)
thrownewArgumentException("It's no file!~");
else
{
string fileName = files[0].FileName;
System.IO.
Stream stream = files[0].InputStream;
files[0].SaveAs(tempPath +
"\\" + fileName);
string dataFilePath = Path.Combine(tempPath, fileName);
if (!System.IO.File.Exists(dataFilePath)) thrownewArgumentException("file not exist", dataFilePath);
var columnNamedTsv = ColumnNamedTsv.CreateFromFile(dataFilePath);
var e2eTaskLineList = E2ENewsAnswerSBSParser(columnNamedTsv);
//ret.Success = true;
ret.Data = e2eTaskLineList;
System.IO.
File.Delete(dataFilePath);
}
}
catch (Exception e)
{
//ret.Success = false;
ret.Message = e.ToString() +
"--Review failed~~";
thrownewArgumentException("error occurred:"+e);
}
return Json(ret, JsonRequestBehavior.AllowGet);
}
用浏览器的开发人员工具看一下服务端的响应是什么?
服务端已经完成了对我的file 操作,也生成了json,就在我return json(ret,XXXbehavior)之后就没有回到我的提交页面
@来杯咖啡: 服务器返回给浏览器的Content-Type是什么?
@dudu: Text
@来杯咖啡: $.ajax中指定的是 datatype: "JSON" ,两者对不上
@dudu: 好的,我试试。不过因为进度关系,我现在换了一种方法,就是使用ViewBag.Result存储,页面再去读取。
你咋知道的不能返回页面?
因为 我是ajax提交后,无论返回的成功失败,都有处理,但是这边没有效果,只是将json直接在浏览器打开,而不是回到我原来提交的页面。
@来杯咖啡:
public ActionResult TaskFilesReview
好久没写MVC了,抄了一段英文,不知道对不对,你看看吧。
Use JsonResult
when you want to return raw JSON data to be consumed by a client (javascript on a web page or a mobile client).
Use ActionResult
if you want to return a view, redirect etc to be handled by a browser.
那应该是 ActionResult,我想return 一个View,把我处理后的data display 出来。
@来杯咖啡: 那我能说啥呢。
虽然你觉得是ActionResult,试试JsonResult好像世界也不会毁灭吧。
不懂原理的时候,其实可以用试错的方法来做对事情的。
做着做着也就懂了。
你到底想AJAX还是不想AJAX呢?
@爱编程的大叔:对不起,上头催进度所以思路很乱,马上我试试,谢谢您指教。
是不是上传文件太大,超时了
没有超时,file已经得到了 也已经处理完了。
抓个包 看看,或者在后台设个断点
这边js 是嵌入在html页面的,断点停不下来~~~
抓包吧。 断点停不下来就用开发者工具。
说一个比较不沾边的话 你发布的代码能不能稍微格式化整理下,一眼搂过去,给人太凌乱的感觉
对不起,有点冲忙,赶进度。以后会注意。
看看处理文件上传Action的返回值是不是有问题,加上断点调试下就知道。
返回值 没有问题,是不是form的post 提交方式不能 使用json 返回原来的page呢?