代码之家  ›  专栏  ›  技术社区  ›  Elixir

JSON数据无法与web服务签名匹配

  •  0
  • Elixir  · 技术社区  · 15 年前

    我似乎还是不能把这个弄到手工作。爱尝试了字符串数组对象数组字典。我可能格式化我的JSON不正确,但我使用的是labs\u JSON插件。如果我删除数据并测试它正确调用的webservice。我的代码如下所示:

    HTML格式:

    <div style="display: block; float: left;">
            <asp:Repeater ID="rptMenuRecipeCategories" runat="server">
                <HeaderTemplate>
                    <div class="recipeChecklistHeader">Menu Recipe Categories</div>
                    <ul id="menuRecipeCategories" class="connectedSortable">
                </HeaderTemplate>
                <ItemTemplate>
                    <li id="item_<%# Container.ItemIndex + 1 %>" recipeCategoryId='<%# Eval("RecipeCategoryID") %>' >
                        <%# Eval("RecipeCategory") %>
                    </li>
                </ItemTemplate>
                <FooterTemplate>
                    </ul>
                </FooterTemplate>
            </asp:Repeater>
    </div>
    <div style="display: block; float: left">
            <asp:Repeater ID="rptAvailableMenuRecipeCategories" runat="server">
                <HeaderTemplate>
                    <div class="recipeChecklistHeader">Available Menu Recipes</div>
                    <ul id="availabeMenuRecipeCategories" class="connectedSortable">
                </HeaderTemplate>
                <ItemTemplate>
                    <li id="item_<%# Container.ItemIndex + 1 %>" recipeCategoryId='<%# Eval("RecipeCategoryID") %>'>
                        <%# Eval("RecipeCategory") %>
                    </li>
                </ItemTemplate>
                <FooterTemplate>
                    </ul>
                </FooterTemplate>
            </asp:Repeater>
    </div>
    

        $(function () {
            $("#menuRecipeCategories, #availabeMenuRecipeCategories").sortable({
                connectWith: '.connectedSortable',
                update: function (ev, ui) {
                    //var result = $('#menuRecipeCategories').sortable('toArray');
                    //updateSequenceNumber(result);
                }
            }).disableSelection();
        });
    

    函数persistRecipeCategorisToJSON(){ var items=$('#menuRecipeCategories').sortable('toArray'); var字典数据=“”; var itemArray=新数组();

            for (i = 0; i <= items.length - 1; i++) {
                if (items[i].length == 0)
                    continue;
    
                var item = $('#' + items[i])[0];
                var recipeCategoryId = item.attributes["recipeCategoryId"].nodeValue;
                itemArray[i] = recipeCategoryId;
            }
    
            persistPositionUsingAjax($.json.encode(itemArray));
        }
    
        $(document).ready(function () {
            $.ajaxSetup({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json"
            });
        });
    
        function persistPositionUsingAjax(jsonData) {
            var webServiceURL = '<%=ResolveUrl("~/UserControls/MenuRecipeChecklistService.asmx")%>' + '/UpdateMenuRecipeChecklist';
            $.ajax({
                // This is page.name/MethodName     
                url: webServiceURL,
    
                // This is the data (method arguments)
                data: jsonData,
    
                // This is the handler for success.     
                success: function (msg) {
                    alert('success');
                }
            });
        }  
    

    JSON码:

    ["1","2"]
    

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string UpdateMenuRecipeChecklist(*INPUT TYPE TO GO HERE*)
            {
                return "";
           }
    

    ****好的,伙计们。我已经解决了这个问题。JSON实验室插件的JSON格式似乎不正确。 我在PersistRecipeCategorisToJSON函数中添加了以下行:**

    var args = { jsonData: itemArray };
    persistPositionUsingAjax($.json.encode(args));
    

    然后通过为对象指定一个名称来正确格式化JSON。 然后,我将webservice的方法签名更新为:

    public string UpdateMenuRecipeChecklist(string[] jsonData)
    

    2 回复  |  直到 15 年前
        1
  •  0
  •   Elixir    15 年前

    这个问题现在解决了。我已经修改了原来的文章,在底部包含了解决方案。

        2
  •  0
  •   Hari Pachuveetil    15 年前

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string UpdateMenuRecipeChecklist(List<string>)
    { 
       return ""; 
    }
    

    编辑:已修改为将参数作为 List string IEnumerable 属于 一串 .

    persistPositionUsingAjax(itemArray)