我正在使用ajax从我的SOAP Web服务调用web方法。当我以这种方式打电话给我的网络服务时:
MyWebservice.MyWebMethod("test",LunchMyFunction);
function LunchMyFunction(response) {
alert(response); // [object Object]
var gridView = $find('<%= MyGridView.ClientID %>');
gridView.set_dataSource(response);
gridView.dataBind();
}
返回的响应将是[object Object]
但是当我以这种方式使用Ajax调用它时:
$.ajax({
type: "POST",
url: 'MyWebservice.asmx/MyWebMethod',
data:{ testVal : "test" },
success: function (response) {
alert(response); // [object XMLDocument]
var gridView = $find('<%= grdvUploadFiles.ClientID %>');
gridView.set_dataSource(response);
gridView.dataBind();
},
error: function (err) { alert(err.statusText); }
});
这里返回的响应是[object XMLDocument]。现在问题是我的gridView在第一种情况下正确填充,而在第二种情况下它没有填充,甚至没有显示。我真的需要使用ajax调用来调用我的web服务,因为我必须将文件传递给我的webmethod才能上传到服务器上,并且这些文件不能通过第一种方法发送。那么返回Object类型的对象而不是XMLDocument的最佳方法是什么?
编辑:
我已经尝试过这个返回Object的解决方案,但它没有上传文件,我的webmethod中的计数器返回0表示无法以这种方式发送文件:
var fileUpload = $("#FileUpload1").get(0);
var files = fileUpload.files;
var fileData = new FormData();
fileData.append(files[0].name, files[0]);
fileData.append('username', 'Test');
$.ajax({
type: "POST",
url: 'MyWebservice.asmx/MyWebMethod',
data: JSON.stringify(fileData),
contentType: "application/json; charset=utf-8",
processData: false,
dataType: "json",
success: function (response) {
alert(response); // [object Object]
....
});
旧的是:
$.ajax({
url: 'MyWebservice.asmx/MyWebMethod',
type: "POST",
contentType: false,
processData: false,
data: fileData,
success: function (response) {
alert (response); // response is [object XMLDocument]
var gridView = $find('<%= grdvUploadFiles.ClientID %>');
gridView.set_dataSource(response);
// gridView could not be filled and the process stops here
gridView.dataBind();
}
});