如何从ajax调用返回Object类型的响应?

时间:2017-01-04 07:27:58

标签: jquery ajax web-services object xmldocument

我正在使用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();
        }
 });

0 个答案:

没有答案