由于webform都是服务器控件,下拉框数据获取量有点大,所以需求是点击下拉框它才从后台获取数据选择,服务器控件只有鼠标点击SelectedIndexchange事件,想点击下拉框,再让下拉框去后台获取事件,所以用HTML控件,用ajax来获取后台数据。
遇到的问题是:ajax不接收数据,提交到了后台的方法里了,后台方法也将json数据返回,可是ajax的success没有接收到,一直是data not a defined,有没有大佬来看一下这到底是什么错!//这是一个下拉框点击事件的函数
function selectClick() {
            //遍历所有option
            var count = document.getElementById('drp_Author').options.length;
            if (count < 2) {
                $.ajax({
                    url: 'JournalArticle.aspx/SetSelect',
                    type: 'post',
                    dataType:'json',
                    contentType: 'application/json;charset=utf-8',
                    success: function (d) {
                        $(d).each(function () {
                            $("#drp_Author").append("<option name='newOptions' value='" + this.id + "'>" + this.Author + "</option>")
                        })
                    },
                    error: function (d) {                        alert(d);                    }
                })
            }        }
//这是我的下拉框
<select id="drp_Author" style="width:100px;" onclick="selectClick()">
                        <option value="0">--请选择--</option>
                    </select>//这是我的后台代码
/// <summary>
     /// 给页面回传
     /// </summary>
     /// <returns></returns>
    [System.Web.Services.WebMethod()]
    public static string SetSelect()
    {
        string strData = string.Empty;
        manager_JournalArticle man = new manager_JournalArticle();
        strData = man.DataSelect();//获取数据的一个方法,在这里直接将数据化为json格式
        return strData;
    }//前台一直取不到数据

解决方案 »

  1.   

    把content-type参数去掉    或者把后台方法返回的string换成json试试
      

  2.   

    contentType去掉之后ajax就找不到后台的方法,您说的将方法返回值改为Json应该怎么改
      

  3.   

    JournalArticle.aspx/SetSelect  这个是啥?难道说浏览器端要下载一个 json 数据,服务器端就要重建整个页面、经历整个页面生命周期吗?服务器端应该使用轻量级的数据服务,例如 ashx。如果你使用 aspx 来提供数据服务的话,那么就不要使用 asp.net 了,还不如从来不用 asp.net。
      

  4.   

    以页面对象嵌入 webservice 方法,这不是一个恰当的方式。另外你的前端的 d,也不是获得返回的方式。d.d 才是返回值。你应该贴出 vs 调试 javascript 的截图,应该学会调试 javascript 代码。
      

  5.   

    你先确认一下你的断点是进到sucess了还是fail了,因为是异步的,你鼠标移到变量那儿看值的时候未必有用(这个地方你能理解吗?)我刚才把你的code试着跑了一下,刚才是因为我的jquery版本不对,断点会跑到error里,报错是parseerror(通过error回调的第二个参数textstatus看的),而且后台cs的代码断点都没进去,
    后来用的百度的jquery(<script type="text/javascript" src="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/static/protocol/https/jquery/jquery-1.10.2.min_65682a2.js"></script>)测试ok的顺便告诉你,你的success里的解析有问题,不能这样的,我下面把我的ajax方法发给你,你参考后再试一下吧$.ajax({
                    url: 'Default.aspx/Test',
                    type: 'post',
                    dataType: 'json',
                    contentType: 'application/json;charset=utf-8',
                    success: function (data) {
                        var arrModel = JSON.parse(data.d);                    
                        $.each(arrModel.d,function (a,b) {
                            $("#drp_Author").append("<option name='newOptions' value='" + b.id + "'>" + b.Autor + "</option>")
                        })
                    },
                    error: function (xhr, ts, et) {
                        alert(ts);
                    }
                })
      

  6.   

    老铁,你的链接少了"\" ,,正确的方法:url: '/JournalArticle.aspx/SetSelect',