通过Ajax使用FormData向webmethod传递超过1个值
我试图使用Ajax方法中的FormData方法将上传的图像+两个附加参数传递给我的web服务,如下所示:通过Ajax使用FormData向webmethod传递超过1个值,ajax,asmx,webmethod,form-data,Ajax,Asmx,Webmethod,Form Data,我试图使用Ajax方法中的FormData方法将上传的图像+两个附加参数传递给我的web服务,如下所示: var formData = new FormData(); formData.append('file', $('#photo')[0].files[0]); formData.append('u', "test"); formData.append('s', "Testing"); 我的ajax调用概述如下: $.ajax({ url:
var formData = new FormData();
formData.append('file', $('#photo')[0].files[0]);
formData.append('u', "test");
formData.append('s', "Testing");
我的ajax调用概述如下:
$.ajax({
url: "/admin/WebService/test.asmx/UploadImage",
type: "POST",
processData: false,
contentType: false,
data: formData,
success: function (response) {
console.log(response);
},
error: function (er) {
alert(er);
}
});
它调用此webmethod:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string UploadImage()
{
if (System.Web.HttpContext.Current.Request.Files.AllKeys.Any())
{
var t= System.Web.HttpContext.Current.Request.Files["s"];
var c= System.Web.HttpContext.Current.Request.Files["u"];
var p = System.Web.HttpContext.Current.Request.Files["file"];
}
else
{
return "Error";
}
return "Error";
}
我遇到的问题是参数'u'和's'为空,但在引用文件时,我能够获得其值
在搜索网页时,我觉得你可以在使用这种方法时指定尽可能多的键/值,除非我被误导了?有人能解释一下为什么这两个参数是空的吗?提前感谢。您应该创建一个
json
而不是创建这些东西,添加您希望通过ajax发送的任何键
var formData = {'u':'value','s':'value'}
$.ajax({
url: "/admin/WebService/test.asmx/UploadImage",
type: "POST",
processData: false,
contentType: false,
data: JDON.Stringify(formData),
success: function (response) {
console.log(response);
},
error: function (er) {
alert(er);
}
});
尝试使用这种方式。你应该创建一个
json
而不是创建这个东西,添加你想通过ajax发送的任何键
var formData = {'u':'value','s':'value'}
$.ajax({
url: "/admin/WebService/test.asmx/UploadImage",
type: "POST",
processData: false,
contentType: false,
data: JDON.Stringify(formData),
success: function (response) {
console.log(response);
},
error: function (er) {
alert(er);
}
});
试着用这种方法。这对我很有用:
JavaScript
var formData = new FormData();
formData.append("UserId", userId);
formData.append("RequestPhoto", imageFile);
formData.append("RequestVoiceRecord", voiceFile);
formData.append("Latitude", latitude);
formData.append("Longitude", longtitude);
$.ajax({
type: "POST",
url: "/User/CreateRequest",
data: formData,
contentType: false,
processData: false,
success: function () {
alert("OK");
},
error: function () {
alert("Error");
}
});
控制器:
public class UserController : ApiController
{
[HttpPost]
public int CreateRequest()
{
// HttpResponseMessage result = null;
var httpRequest = HttpContext.Current.Request;
var req = new UserRequest
{
UserId = Guid.Parse(httpRequest.Form["UserId"]),
Photo = httpRequest.Files["RequestPhoto"],
VoiceRecord = httpRequest.Files["RequestVoiceRecord"]
Latitude = float.Parse(httpRequest.Form["Latitude"]),
Longitude = float.Parse(httpRequest.Form["Longitude"]),
};
这对我很有用:
JavaScript
var formData = new FormData();
formData.append("UserId", userId);
formData.append("RequestPhoto", imageFile);
formData.append("RequestVoiceRecord", voiceFile);
formData.append("Latitude", latitude);
formData.append("Longitude", longtitude);
$.ajax({
type: "POST",
url: "/User/CreateRequest",
data: formData,
contentType: false,
processData: false,
success: function () {
alert("OK");
},
error: function () {
alert("Error");
}
});
控制器:
public class UserController : ApiController
{
[HttpPost]
public int CreateRequest()
{
// HttpResponseMessage result = null;
var httpRequest = HttpContext.Current.Request;
var req = new UserRequest
{
UserId = Guid.Parse(httpRequest.Form["UserId"]),
Photo = httpRequest.Files["RequestPhoto"],
VoiceRecord = httpRequest.Files["RequestVoiceRecord"]
Latitude = float.Parse(httpRequest.Form["Latitude"]),
Longitude = float.Parse(httpRequest.Form["Longitude"]),
};
我已经更改了代码以匹配您指定的内容,但是现在我没有设置键,我将如何在webservice it self中从formData中提取值?您是否收到服务的响应。打开浏览器的控制台,检查它返回的响应是什么?我已经更改了代码以匹配您指定的内容,但是现在我没有设置键,如何从Web服务it自身中的formData中提取值?您是否从服务获得响应。打开浏览器的控制台,检查它返回了什么响应?也为我工作,谢谢也为我工作,谢谢