我正在使用Jquery Form Plugin提交这样的表单数据。
$('#AddLocalImageForm').ajaxSubmit({
beforeSubmit: function() { alert('b4'); },
success: function(data) { alert('afa');},
dataType: 'json'
});
<form id="AddLocalImageForm" action="Service/UploadCustImage.ashx" method="post" enctype="multipart/form-data">
<input type="file" name="CustImage" id="CustImage" />
<br />
<label for="ImageName">Name</label>
<input type="text" name="ImageName" id="ImageName"/>
<br />
<input type="submit" />
</form>
我发布数据的页面是一个
的ashx页面context.Response.ContentType = "application/json";
并使用
返回数据context.Response.Write(JsonData);
我可以看到所有内容都已正确发布,我正在获取核心Json Data,但我总是被提示从我的浏览器下载Json数据。 我想要做的是能够在后台获取返回的数据并更新一些Dom元素。 beforeSubmit函数执行但成功函数永远不会执行。 如果我从插件sample页面复制代码,我会得到同样的结果。
如何才能使返回的数据由函数处理,而不是提示我下载?
更新 因此,如果我将处理发布数据的ashx页面上的内容类型更改为
context.Response.ContentType = "text/html";
我不再提示我下载文件,但我仍然无法处理返回的数据,因为成功函数永远不会执行。我是否需要告诉它成功或者是否返回数据是否只是假设成功?
答案 0 :(得分:3)
回答我自己的问题,希望有一天能帮助别人。
所以看起来成功永远不会运行的原因是因为它不相信请求成功。 如果我改为
$('#AddLocalImageForm').ajaxSubmit({
beforeSubmit: function() { alert('b4'); },
success: function() { alert('Run on Success'); },
error: function(request, errordata, errorObject) { alert(errorObject.toString()); },
dataType: 'json'
});
将ASHX的ContentType设置为
context.Response.ContentType = "text/html";
我收到ASHX返回无效json的错误。所以,如果我注释掉像
这样的dataType选项 $('#AddLocalImageForm').ajaxSubmit({
beforeSubmit: function() { alert('b4'); },
success: function() { alert('Run on Success'); },
error: function(request, errordata, errorObject) { alert(errorObject.toString()); }
//dataType: 'json'
});
我没有被提示下载该文件,并且能够处理返回的Json;
<强> Wheeewwwww !!! 强>
答案 1 :(得分:2)
文件输入确实会导致AJAX提交出现大量问题,因为XMLHttpRequest不支持它,Form插件有一个解决方法,但就返回数据而言,这意味着表单的工作方式与通常略有不同
阅读有关file upload issue。
的插件文档