ASP.net 4 Web サービス WebMethod への FormData の jQuery AJAX ポストの処理に問題があります。
<input id="ipt_file" type="file" />
<a href='#' onclick="UploadFile();" data-role='button'>Upload</a>
var UploadFile = function () {
var file_object = $('#ipt_file')[0].files[0];
var form_data = new FormData();
form_data.append('job_id', '123456');
form_data.append('job_name', 'xyx');
form_data.append('job_file', file_object);
var xhr_upload = $.ajax({
type: "POST",
headers: { "Cache-Control":"no-cache", "Content-Type":"multipart/form-data" }, // also tried without these
url: "../MyServices.asmx/Upload",
data: form_data,
processData: false,
contentType: false,
dataType: "json",
success: function (msg) {
if (typeof (msg) === "object") {
var _upload = $.parseJSON(msg.d);
alert(_upload.status + ': ' + _upload.msg);
};
}
});
};
public class FileUploadRequest
{
public string job_id { get; set; }
public string job_name { get; set; }
public HttpPostedFile job_file { get; set; }
}
[WebMethod]
public string Upload(FileUploadRequest x)
{
string str_response = string.Empty;
if (x.job_file.ContentLength > 0)
{
str_response = "{\"status\":1,\"msg\":\"" + x.job_id + ", " + x.job_name + ", " + x.job_file.FileName + "\"}";
}
else
{
str_response = "{\"status\":0,\"msg\":\"FAIL"\}";
};
return str_response;
}
FormData オブジェクト パラメーターを適切に処理してはなりません。ここでカスタム クラスをインスタンス化しましたが、サーバーから返されるのは 500 エラーだけです (汎用オブジェクト x も試しました)。また、いくつかの投稿で見たように、それを HttpRequest オブジェクトとして処理しようとしましたが、役に立ちませんでした。この場合、IE 9 との非互換性は気にしません。単一のファイルのアップロード、または少なくとも asmx WebMethod によって適切に受信されたキーと値のペアを持つ FormData オブジェクトを確認したいだけです。