对象'对象'无法转换为类型'数组'

时间:2017-01-05 08:40:02

标签: javascript jquery asp.net ajax post

我已经阅读了很多文章的这个错误,我尝试了很多解决方案,但没有任何工作!我坚持这个错误,因为3天我希望有人可以帮助我,谢谢! 我正在做的是通过两种方式从我的mypage.aspx调用我的web服务:

A - )

MyWebservice.MyWebMethod("test",LunchMyFunction);

function LunchMyFunction(response) {
   alert(response); // [object Object] 
   var gridView = $find('<%= MyGridView.ClientID %>');
   gridView.set_dataSource(response);
   gridView.dataBind();
}

这里gridview已正确填充,一切正常。

乙 - )

$.ajax({
         type: "POST",
         url: 'MyWebservice.asmx/MyWebMethod',
         data:{ testVal : "test" },
         success: function (response) {
            alert(response); // [object XMLDocument]
            var gridView = $find('<%= MyGridView.ClientID %>');
            try {
            gridView.set_dataSource(response);
            } catch (err) {
               alert(err);
            }
            gridView.dataBind();
         },
         error: function (err) { alert(err.statusText); }
});

这里我的web方法正在完成它的工作但是当涉及到setdatasource时:抛出一个错误: Sys.ArgumentTypeException:Sys.ArgumentTypeException:类型&#39;对象&#39;的对象无法转换为类型&#39;数组&#39;。参数名称:值

我认为抛出此错误是因为响应类型在两种情况下都不同,所以我尝试将类型设置为json以返回[object Object]。返回Object后,该方法仍会抛出相同的错误。我试过ScriptMode =&#34; Release&#34;在我的主页中不在mypage.aspx中的ToolkitScriptManager中,但没有任何改变。

<cc1:ToolkitScriptManager ScriptMode="Release" ID="ToolkitScriptManager1" AsyncPostBackTimeout="600" EnablePartialRendering="true" EnablePageMethods="true" runat="server">
    <Services>
        <asp:ServiceReference path="MyWebservice.asmx" />
    </Services>
    <Scripts>
        <asp:ScriptReference path="~/JavaScript/WebKitFix.js" />
    </Scripts>
 </cc1:ToolkitScriptManager>

cc1的程序集是AjaxControlToolkit,mypage.aspx包含在母版页中。什么可能是问题的任何想法?我该如何解决?

1 个答案:

答案 0 :(得分:0)

最后,经过搜索,我发现第二种方法的反应是:

{"d":[{"__type":"UploadedFile","Success":"Success","UploadedURL":"Uploaded URL"}]}

虽然我需要 response.d 来返回:

[{ "__type": "UploadedFile", "Success": "Success", "UploadedURL": "Uploaded URL"}]

这是我的错误,谢谢