表格:
<form action="upload-document.aspx" onsubmit="sendAndClose();" method="post" enctype="multipart/form-data">
<input name="fileToUpload" id="fileToUpload" type="file" />
<input type="submit" name="submit" value="Send" />
</form>
AJAX:
function sendAndClose() {
currentUrl = location.protocol + '//' + location.host + location.pathname;
var data = new FormData();
var file = $("#fileToUpload")[0].files[0];
data.append("name", file.name);
data.append("size", file.size);
data.append("type", file.type);
data.append("file", file);
$.ajax({
type: "POST",
url: currentUrl + '/Persist',
dataType: 'json',
data: data,
cache: false,
contentType: false,
processData: false,
success: function () {
parent.$.fancybox.close();
},
error: function (request, error) {
alert("[" + error + "] - FAIL: " + request.responseText);
parent.$.fancybox.close();
}
});
}
守则背后:
[WebMethod]
public static bool Persist(object data)
{
return true;
}
提交表单时,它会运行ajax并在进入webmethod之前直接进入错误回调。谁能告诉我为什么?
另外,在'var file'之后我有一个警告来显示文件的名称,大小等...所以它获取文件,问题是ajax拒绝与代码隐藏通信。
答案 0 :(得分:0)
我有一个类似的问题,通过在ajax函数中添加此参数来解决:
traditional: true
请尝试使用此代码进行AJAX调用:
$.ajax({
type: "POST",
url: currentUrl + '/Persist',
dataType: 'json',
data: data,
cache: false,
contentType: false,
processData: false,
traditional: true,
success: function () {
parent.$.fancybox.close();
},
error: function (request, error) {
alert("[" + error + "] - FAIL: " + request.responseText);
parent.$.fancybox.close();
}
});
答案 1 :(得分:0)
您无法调用http://localhost:40899/upload-document.aspx/Persist
之类的网络方法。 currentUrl不正确。
答案 2 :(得分:0)
继续我在评论部分提出的问题后,我想补充一点,public static bool Persist...
方法必须在页面中(ASPX),而不是用户控件(ASCX)。
这是因为页面(ASPX)通过URL对外界“可见”,而用户控件(ASCX)仅在服务器上用于构建页面而不是URI本身,并且因此外部呼叫者无法访问。
如果您需要在用户控件中调用该方法,则需要将Persist
方法(带有WebMethod
属性)移动到您的页面(ASPX),然后通过该方法调用进入你的用户控制(ASCX)。