【问题标题】:How to get responsetext from a Page with Post method using XMLHttpRequest in asp.net?如何在 asp.net 中使用 XMLHttpRequest 从带有 Post 方法的页面获取响应文本?
【发布时间】:2020-07-16 07:51:50
【问题描述】:

我有一个web page,它使用FormData 使用POST 方法和XMLHttpRequestvideo file/blob 发送到另一个网页。我想在调用函数中从Posted URL 以字符串形式返回响应。即成功上传文件后,我想将字符串返回给调用者。

index.aspx:

function SendFile(blob)
{
var file = new File([blob], "testfile123.webm");
var oData = new FormData();
oData.append("file", file,"testfile.webm");
var oReq = new XMLHttpRequest();
oReq.open("POST", "upload.aspx", true);
oReq.onload = function (oEvent) 
{
  if (oReq.status == 200) 
  {
    alert("Uploaded"+oReq.responseText);
  } 
  else {
    alert("Error");                     
  }
};
oReq.send(oData);
}

上传.aspx:

protected void Page_Load(object sender, EventArgs e)
{
     string folderPath = GetUploadFolderPath();
     string filename = DateTime.Now.ToString("dd-MM-yyyy-HH-mm-ss") + ".webm";  
     HttpFileCollection fileCollection = Request.Files;
     for (int i = 0; i < fileCollection.Count; i++)
     {
         HttpPostedFile postedFile = fileCollection[i];
         var filePath = folderPath + filename; //postedFile.FileName;
         postedFile.SaveAs(filePath);

     }             
 }

在上面的代码中,文件是在指定位置创建的,一切正常。我知道这在Page_Load 事件中是不可能的。请建议文件上传后发送响应文本/字符串的正确方法。

帮助表示赞赏。

【问题讨论】:

  • 这里不是真正的问题,但我建议使用通用处理程序 ashx 进行数据传输,而不是 aspx。通常不需要完整的生命周期(初始化、加载、渲染、预渲染、onerror)和 aspx 为文件上传提供的网络表单。 SO上有例子
  • 只是在这里猜测,但它不只是像Response.Write("some response");这样的东西吗?
  • @Lain Request.Files 在静态方法中不可访问。 :( 我也需要作为文本/字符串的响应,并且不想使用 Response.Write 编写响应

标签: javascript asp.net xmlhttprequest httpresponse postfile


【解决方案1】:

这是一个 scraped 示例,介绍如何使用 vb.netjquery.ajax 定位 aspx 内的特定函数/强>。遗憾的是,我的 C# 并不流利。

请注意,如果您使用的是旧版本的 .net(两个或更低版本),则必须在 web.config 中添加 System.Web.Extensions 才能使其正常工作。取决于 IIS 或者 httpModulesmodules

AJAX.aspx

<WebMethod(EnableSession:=True)> _
Public Shared Function abc(def As String) As Boolean
    ''REM: Do stuff
    Return True
End Function

使用 jquery 调用 xhr

$.ajax({
    type: "POST",
    url: "AJAX.aspx/abc",
    data: "{'def':'test'}",
    contentType: "application/json; charset=utf-8",
    dataType: "text",
    success: function(response){...},
    error: function(jqXHR, textStatus, errorThrown){...}
});

然而,我仍然建议使用通用处理程序,如here 所示。它更干净、更纤薄,并且可以更好地控制您实际想要做的事情。 System.Web.Extensions 也不是必需的。

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2017-07-21
    相关资源
    最近更新 更多