直接使用ajax页面方法访问数据

时间:2011-08-02 09:53:48

标签: asp.net json jquery

我想访问数据并在标签中显示ajax页面方法但数据未显示。

PageMethods.GetDataFromDB(OnSucceeded, OnFailed);
         //}
        function OnSucceeded(result, userContext, methodName) {
            var jsonData = eval(result.d);
            $get('Label1').innerHTML = jsonData.FirstName;
        }    
 [WebMethod]
    public static string GetDataFromDB()
    {
        System.Collections.Generic.Dictionary<string, string> DictionaryGetPerson = new Dictionary<string, string>();
        using (OracleConnection con = new OracleConnection("server=xe; uid=system; pwd=;"))
        {
            string Command = "Select * from tblSavePerson";                //selecting Top 1 Row in Oracle
            OracleCommand cmd = new OracleCommand(Command, con);
            con.Open();
            OracleDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                DictionaryGetPerson.Add("FirstName",dr["FirstName"].ToString());

            }
        }
        JavaScriptSerializer js = new JavaScriptSerializer();
       return js.Serialize(DictionaryGetPerson).ToString();

}

表只有一行。

1 个答案:

答案 0 :(得分:0)

由于你已经将标签作为jQuery和jQuery Ajax给出了,我与解决方案略有不同。

做这些事

1.将WebMethod包裹在try-catch块中。 try-catch是有原因的。

[WebMethod]
public static string GetDataFromDB()
{
    try
    {
        System.Collections.Generic.Dictionary<string, string> DictionaryGetPerson = new Dictionary<string, string>();
        using (OracleConnection con = new OracleConnection("server=xe; uid=system; pwd=;"))
        {
            string Command = "Select * from tblSavePerson";                //selecting Top 1 Row in Oracle
            OracleCommand cmd = new OracleCommand(Command, con);
            con.Open();
            OracleDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                DictionaryGetPerson.Add("FirstName", dr["FirstName"].ToString());

            }
        }
        JavaScriptSerializer js = new JavaScriptSerializer();
        return js.Serialize(DictionaryGetPerson).ToString();
    }
    catch (Exception exception)
    {
        //Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
        throw new Exception(exception.Message);
    }
}

请注意,如果您有多行,此词典将失败并显示重复键错误。如果没有错误,请转到步骤2.

2.不要使用 PageMethods.GetDataFromDB 。它非常古老Using jQuery one can consume ASP.NET Ajax Page Methods directly。像这样调用页面方法。

function LoadNames() {
    $.ajax({
        contentType: "application/json;",
        data: "{}",
        type: "POST",
        url: 'Test1.aspx/GetDataFromDB',
        success: function (msg) {
            OnSucceeded(msg);
        },
        error: function (xhr, status, error) {
            //alert("error");
            //OnFailed(a, b, c);
        }
    });
}

function OnSucceeded(dict) {
    var jsonData = dict.hasOwnProperty("d") ? dict.d : dict;
    var json = $.parseJSON(jsonData);
    alert(json.FirstName);

}

另外,当我们在jQuery中有eval(result.d)时,请不要 $.parseJSON

希望这有帮助。