【发布时间】:2018-10-08 23:44:22
【问题描述】:
我进行了 AJAX 调用以将图像文件发送到我的 Web 服务 (.asmx) 方法之一。一切正常,但问题是 Web 服务返回 XML 而不是 JSON,因为我必须将 'contentType' 设置为 'false',否则无法发送文件。 (如果我将 contentType 设置为 application/json; charset=utf-8,它会返回 JSON,但我不能这样做,因为我正在发送文件。)
这是我的 JavaScript:
function setAvatar(imageFile, successCallback) {
var formData = new FormData();
formData.append("UploadedAvatar", imageFile);
$.ajax({
type: "POST",
url: "/Services/UserService.asmx/SetAvatar",
contentType: false,
processData: false,
dataType: 'json',
data: formData,
success: function (result) {
alert(result.d);
alert(result.d.IsSuccessful);
if (typeof successCallback === 'function')
successCallback(result);
}
});
以及web服务方法:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public Result SetAvatar()
{
HttpPostedFile postedFile = HttpContext.Current.Request.Files["UploadedAvatar"];
Image avatar = Image.FromStream(postedFile.InputStream, true, true);
avatar = new Bitmap(avatar, new Size(150, 150));
avatar.Save(Path.Combine(path, $"Avatar-Small.jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);
return new Result(true, Messages.AvatarSavedSuccessfully);
}
【问题讨论】:
-
查看我的回答here。您正在尝试返回一个对象,但必须先对其进行序列化。之后您可能可以删除 contentType 并使用默认设置。
-
@wazz 这对我没有帮助
-
看到这个stackoverflow.com/questions/42360139/…,确保你有
options.RespectBrowserAcceptHeader = true;,这样返回类型就基于Accept这个头
标签: javascript jquery asp.net ajax web-services