首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jQuery对WebMethod的AJAX调用中获得空响应,但WebMethod方法返回WebMethod

在jQuery对WebMethod的AJAX调用中获得空响应,但WebMethod方法返回WebMethod
EN

Stack Overflow用户
提问于 2018-02-02 17:22:35
回答 1查看 882关注 0票数 0

对于一个jQuery AJAX调用,我将得到空/未定义的响应。我试图在asp.net webforms中将数据绑定到Jquery数据表。当我试图解析数据时,它会在位置1错误的JSON中给出一个意外的标记o。我怀疑问题可能与JSON数据有关,但我已经在JSONlint.com验证了json输出。它一定是我的一些愚蠢的错误,但我无法弄清楚,我浪费了几个小时来解决它。

jQuery Ajax调用

代码语言:javascript
复制
<script type="text/javascript">
    $(function () {
        $('#ShowData').click(function () {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: 'Default.aspx/fetchDetails',
                dataType: 'json',                    
                data: "{'JobID':'" + $('#txtJobID').val() + "'}",
                success: function (response) {
                    //var d = JSON.parse(data);
                    var data = response.d;
                    alert(typeof (data)); //gives out object
                    alert(response.d); //gives out null
                    $('#tblBasicInfo').dataTable({
                        paging: false,
                        data: data,
                        columns: [
                            { 'data': 'JobId' },
                            { 'data': 'UserId' },
                            { 'data': 'UserName' },
                            { 'data': 'Cas' },
                            { 'data': 'Question' },                                
                            { 'data': 'Language' },
                            { 'data': 'Appl' },
                        ]
                    });
                },
                error: function (xhr, ajaxoptions, thrownError) {
                    alert(xhr.responseText);
                    console.log(xhr.responseText);
                    console.log(xhr.responseJSON);
                }
            });
        });
    });
</script>

WebMethod

代码语言:javascript
复制
 [System.Web.Services.WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static void fetchDetails(string JobID)
    {
        var conn = System.Configuration.ConfigurationManager.ConnectionStrings["Connection"];
        SqlConnection con = new SqlConnection(conn.ToString());

        String query = "Select TOP 1 * FROM TAble where Jobid =@JobID";
        DataTable dtBasicInfo = new DataTable();
        SqlCommand a = new SqlCommand(query, con);
        a.Parameters.AddWithValue("@JobID", Int32.Parse(JobID));
        con.Open();
        SqlDataAdapter da = new SqlDataAdapter(a);
        da.Fill(dtBasicInfo);
        SqlDataReader value = a.ExecuteReader();
        con.Close();
        JavaScriptSerializer js = new JavaScriptSerializer();

        JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
        List<Dictionary<string, object>> parentRow = new List<Dictionary<string, object>>();
        Dictionary<string, object> childRow;
        foreach (DataRow row in dtBasicInfo.Rows)
        {
            childRow = new Dictionary<string, object>();
            foreach (DataColumn col in dtBasicInfo.Columns)
            {
                childRow.Add(col.ColumnName, row[col]);
            }
            parentRow.Add(childRow);
        }
        var jsk = jsSerializer.Serialize(parentRow);
    }

JSON

代码语言:javascript
复制
[{"JobId":123456789,"UserId":"asdf3a     ","UserName":"Pekki, Barb                      ","Cas":263,"Question":"Q12345","Language":"ENG","Appl":300}]
EN

回答 1

Stack Overflow用户

发布于 2018-02-02 18:34:21

只要确保在您的代码中实现了以下要点,那么所有这些都会像它应该的那样工作。调用datatable API时使用大写字母D,如$('#tblBasicInfo').DataTable({中所示

  1. 您的问题是从您的void中返回一个WebMethod。您需要从C#方法fetchDetails返回一个web对象。
  2. 您不需要在WebMethod中创建JSON或进行任何序列化,因为ASP.Net框架将为您工作;只要从您的C#代码中返回一个有效的对象,所有这些都会正常工作。
  3. 另外,删除前面提到的数据类型标志,因为这是不需要的fetchDetails方法。由于不需要,我已经从fetchDetails方法中删除了所有序列化代码。只需从web方法中返回类的C#对象即可。

因此,在您的示例中,在方法fetchDetails中定义这个类的一个实例。

作业类

代码语言:javascript
复制
public class Job {

  public int JobId {get;set;}
  public string UserId {get;set;}
  public string UserName {get;set;}
  public int Cas {get;set;}
  public string Question {get;set;}
  public string Language {get;set;}
  public int  Appl {get;set;}

}

fetchDetails方法返回作业类型

代码语言:javascript
复制
[System.Web.Services.WebMethod]
 public static Job fetchDetails(string JobID)
{
    var conn = System.Configuration.ConfigurationManager.ConnectionStrings["Connection"];
    SqlConnection con = new SqlConnection(conn.ToString());

    String query = "Select TOP 1 * FROM TAble where Jobid =@JobID";
    DataTable dtBasicInfo = new DataTable();
    SqlCommand a = new SqlCommand(query, con);
    a.Parameters.AddWithValue("@JobID", Int32.Parse(JobID));
    con.Open();
    SqlDataAdapter da = new SqlDataAdapter(a);
    da.Fill(dtBasicInfo);
    SqlDataReader value = a.ExecuteReader();
    con.Close();

    //WRITE CODE to populate a Job object
     Job job = new Job();
    //set properties of job object before returning it as in code below
   If (dtBasicInfo. Rows. Count > 0)
   { 
    job.JobId =  Int32.Parse(JobID);
    job.UserId = dtBasicInfo.Rows[0]["UserId"].toString();
    job.UserName = dtBasicInfo.Rows[0]["UserName"].toString();
   } 

   return job;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48587847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档