【问题标题】:failed jquery call of page method页面方法的jquery调用失败
【发布时间】:2009-09-13 15:42:06
【问题描述】:

我正在尝试使用 jquery 将数据从 HTML 表保存到数据库以调用页面方法。 但是,jquery 调用失败并显示:500 internal server error.. 有什么建议吗?

下面是代码:

脚本:

    $(document).ready(function() {


        $("#save").click(function(event) {

            var i = 0;
            var inputs = new Array();
            $("#tbNames").find("input").each(function() {         
                inputs[i] = [this.id, this.value];
                i++;
            });

            var columnsCount = 2;
            $.ajax({

                type: "POST",
                url: "Default2.aspx/Save",
                contentType: "application/json; charset=utf-8",
                data: "{inputs: inputs, columnsCount: columnsCount}",
                dataType: "json",
                success: AjaxSucceeded,
                 error: AjaxFailed
            });
        });
        function AjaxSucceeded(result) {
            alert(result.d);
        }

        function AjaxFailed(result) {
            alert(result.status + ' ' + result.statusText);
        }

    });



    </script>

HTML:

姓名 任务 删除

    <input id="save" type="button" value="Save data" />

页面方法及C#代码:

 [WebMethod ()]
    public static List<Hashtable> ParseJson(string[] array, int rowsCount)
    {
    var result = new List<Hashtable>();

    List<string[]> list = new List<string[]>();
    foreach (var item in array)
    {
        int comma = item.IndexOf(',');
        list.Add(new string[] { item.Substring(0, comma), item.Substring(comma + 1) });
    }

    int i = 0;
    while (i < list.Count)
    {
        var dict = new Hashtable();
        int j = i + rowsCount;
        for (; i < j; i++)
        {
            dict.Add(list[i][0], list[i][1]);
        }

        result.Add(dict);
    }

    return result;

}

[WebMethod()] 
public static string Save(string[] inputs, int columnsCount)
{
    List<Hashtable> r = ParseJson(inputs, columnsCount);

    List<TestClass> listOfTasks = new List<TestClass>();
    foreach (var item in r)
    {
        TestClass tc = new TestClass();
        tc.name  = (string)item["name"];
        tc.task = (string)item["task"];

        listOfTasks.Add(tc);
    }

    DBManager dbm = new DBManager();
    string actionResult = dbm.SaveData(listOfTasks);
    if (actionResult == String.Empty)
    {
        return "Saved!";
    }
    else
    {
        return actionResult;
    }
}

【问题讨论】:

    标签: c# jquery


    【解决方案1】:

    关键是 json2.js 和它的 stringify 函数。在执行该函数 AJAX 调用后 看起来像这样:

    $.ajax({ type: "POST",
             url: "Default2.aspx/Save",
             contentType: "application/json; charset=utf-8",
             data: "{'inputs':" + JSON.stringify(inputs) + ",'columnsCount':1 }",
             dataType: "json",
             success: AjaxSucceeded,
             error: AjaxFailed
    });
    

    source.

    【讨论】:

      【解决方案2】:

      500 是一般错误。您的 JQuery 使用的 Web 服务有问题。您需要查看服务编写的日志以找出问题所在,或者您应该在服务代码中设置断点进行调试。

      【讨论】:

      • C# Save() 函数的断点未命中。因此,似乎调用 page 方法是失败的。在同一页面上,我放置了一个“hello world”按钮,它也调用页面方法,它工作正常。错误发生在: $.ajax({ type: "POST", url: "Default2.aspx/Save", contentType: "application/json; charset=utf-8", data: "{inputs: inputs, columnsCount : columnsCount}", dataType: "json", 成功: AjaxSucceeded, 错误: AjaxFailed });
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      相关资源
      最近更新 更多