我的AJAX代码错过了什么?

时间:2017-03-20 09:19:08

标签: javascript jquery asp.net ajax

当用户从下拉列表中选择任何值时,Ajax必须调用服务器并通过JSON对象返回一些值。

这是我的 Ajax代码

//AJAX Security
$('#ddlSecurityLevel').change(function () {
    if ($('#ddlSecurityLevel').val() !== 'None') {
        $.ajax({
            type: 'POST',
            url: 'AjaxSecurity.aspx?securityLevelOrUser=SecurityLevel&SecurityKey=1&ReportName=TotalSales',
            contentType: 'application/json; charset=utf-8',
            data: 'json',
            //dataType: JSON.stringify(Data),
            cache: false,
            success: AjaxSucceeded,
            error: AjaxFailed
        });
        function AjaxSucceeded(result) {
            //alert("hello");
            alert(result.d);    // output UNDEFINED
        }
        function AjaxFailed(result) {
            alert("Error");
            alert(result.status + ' ' + result.statusText);
        }
    }
});

Asp.net C#代码

public class GetResult
{
    public string removedReportName { get; set; }
    public string removedColumnNames { get; set; }
    public string removedFilterNames { get; set; }
}

public partial class AjaxSecurity : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        JavaScriptSerializer js = new JavaScriptSerializer();

        string securityLevelOrUser = Request["securityLevelOrUser"].ToString();

        if (securityLevelOrUser.Equals("SecurityLevel"))
        {
            string jsonString = js.Serialize(getResultBySecurityLevel(Request["SecurityKey"], Request["ReportName"]));
            Response.Write(jsonString);
        }
        else
        {

        }
    }

    private GetResult getResultBySecurityLevel(string securityLevel,string reportName)
    {
        GetResult getResult = new GetResult();

        string cs = ConfigurationManager.ConnectionStrings["HQWebMatajer13"].ConnectionString;

        using (SqlConnection con = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = "SELECT ReportHide,RColumnName,RFilterName FROM SecurityLevelDetails WHERE SecurityLevel=@SecurityLevel and ReportName=@ReportName";
            cmd.Parameters.AddWithValue("@ReportName", reportName);
            cmd.Parameters.AddWithValue("@SecurityLevel", securityLevel);

            con.Open();
            SqlDataReader rd=cmd.ExecuteReader();

            while(rd.Read())
            {
                getResult.removedReportName = rd["ReportHide"].ToString();
                getResult.removedColumnNames = rd["RColumnName"].ToString();
                getResult.removedFilterNames = rd["RFilterName"].ToString();
            }

        }

        return getResult;
    }

}

当我使用以下参数运行我的Asp.net代码时,它会在浏览器中返回值

网址 http://localhost:55047/AjaxSecurity.aspx?securityLevelOrUser=SecurityLevel&SecurityKey=4&ReportName=TotalSales

回复于 {"removedReportName":"1","removedColumnNames":"ItemLookupCode,Department","removedFilterNames":"ExtendedDescription,DepartmentName"}

但输出提示是未定义

1 个答案:

答案 0 :(得分:0)

评论数据:'json'和从警报中移除d(result.d);

要访问js alert中的数据,您可以这样写,

function AjaxSucceeded(result) {
    if(result!=null)
     {
      alert(result[0].removedReportName +"," result[0].removedColumnNames);
     }
 }

在Page_Load方法中,您需要清除输出并编写自己的输出,

Response.Clear();
Response.ContentType = "application/json; charset=utf-8";
Response.Write(jsonString);
Response.End();

请检查this链接,这是您需要的