【问题标题】:Unable to recieve JSON from Webmethod using $.getJSON or Ajax call无法使用 $.getJSON 和 Ajax 调用从 Web 方法接收 JSON
【发布时间】:2012-12-03 10:45:19
【问题描述】:

我有一些我想在客户端处理的 JSON 对象,但我指定的我的 WebMethod 不想触发。

这是我在客户端脚本中使用的 Ajax 和 GetJson 方法: 获取SJON

$(document).ready(function() {
         $(document).ready(function() {
             //attach a jQuery live event to the button
             $('#getdata').live('click', function() {
             $.getJSON('/Members_Only/StockMovement/WebForm1.aspx/StockPlacementOptions', function(data) {
               //alert(data); //uncomment this for debug
              // alert(data.item1 + " " + data.item2 + " " + data.item3); //further debug
             $('#showdata').html("<p>item1=" + data.item1 + " item2=" + data.item2 + " item3=" + data.item3 + "</p>");
        });
    });
});

这里是阿贾克斯

$(document).ready(function () {
        $.ajax({
            type: "POST",
            url: "/Members_Only/StockMovement/WebForm1.aspx/StockPlacementOptions",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: "{}",
            success: function (res) {
                $('#Results').append(CreateTableView(res)).fadeIn();
            }
        });
    });

这两种方法都调用 StockPlacementOptions,这是我的 WebMethod,如下所示:

 [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json,
    UseHttpGet = true, XmlSerializeString = false)]
    public static List<StockReturnMethod> StockPlacementOptions()
    {
        scmEntitiesPrimaryCon entities = new scmEntitiesPrimaryCon();
        var binOptions = (from avail in entities.ProductAvailibleBins(1, 2)
                          select new StockReturnMethod() { LotID = (int)avail.LotID, LotName = avail.LotName, AreaID = (int)avail.AreaID, AreaName = avail.AreaName, BinID = (int)avail.BinID, BinName = avail.BinName }).ToList();

        return binOptions;
    }

如果我可以让 JSON Web 方法在 $(document).ready 事件上触发,我将能够处理和使用那里的数据。我还尝试查看具有数据处理能力的不同 jQuery 库,例如 KnockoutJS,但也没有运气。 我正在使用带有 Html5 标记的 Framework 4 上的 ASP Webforms。

任何建议将不胜感激。

【问题讨论】:

  • 您是否确定了应用的哪个部分存在问题?客户端还是服务器?当您直接在浏览器中打开 http://host/Members_Only/StockMovement/WebForm1.aspx/StockPlacementOptions 时会发生什么?此外,您在一个示例中使用GET 方法,在另一个示例中使用POST。您期待哪个页面?

标签: json jquery webforms


【解决方案1】:

为什么在客户端 getJson 和 ajax 使用两个 document.ready() 处理程序

$(document).ready(function() { // <-------you can remove this handler

     $(document).ready(function() {
         $('#getdata').live('click', function() {
         $.getJSON('/Members_Only/StockMovement/WebForm1.aspx/StockPlacementOptions', function(data) {
           //alert(data); //uncomment this for debug
          // alert(data.item1 + " " + data.item2 + " " + data.item3); //further debug
         $('#showdata').html("<p>item1=" + data.item1 + " item2=" + data.item2 + " item3=" + data.item3 + "</p>");
         });
     });
});  // <-------you can remove this handler

虽然我不确定这可能是问题,但如果有帮助,请尝试这个。

【讨论】:

    【解决方案2】:

    我通过结合使用 KnockoutJS 和 ajax 来修复它。

    通过使用 knockoutJS 映射模型,我可以随意操作返回的 JSON :)

    这是我的 Jquery,它执行映射并从服务器获取 JSON。

    <script type="text/javascript">
    //Declareing Viewmodel For KnockoutJS
        var viewModel;
        //Using Mapping Plugin for Knockout JS
        function bindModel(data) {
            viewModel = ko.mapping.fromJS(data);
            console.log(viewModel);
            ko.applyBindings(viewModel);
        }
    
        //Onload ObtainJSON
        $(document).ready(function () {
            $.ajax({
                url: "WebForm1.aspx/StockPlacementOptions",
                // Current Page, Method
                data: {},
                // parameter map as JSON
                type: "POST",
                // data has to be POSTed
                contentType: "application/json",
                // posting JSON content
                dataType: "JSON",
                // type of data is JSON (must be upper case!)
                timeout: 10000,
                // AJAX timeout
                success: function (result) {
                    bindModel(result);
                },
                error: function (xhr, status) {
                    alert(status + " - " + xhr.responseText);
                }
            });
        });
    
    </script>
    

    我还稍微改变了 Webmethod 以获得我想要的结果:

    [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public static List<StockReturnMethod> StockPlacementOptions()
        {
            scmEntitiesPrimaryCon entities = new scmEntitiesPrimaryCon();
    
            var binOptions = (from avail in entities.ProductAvailibleBins(1, 2)
                              select new StockReturnMethod() { LotID = (int)avail.LotID, LotName = avail.LotName, AreaID = (int)avail.AreaID, AreaName = avail.AreaName, BinID = (int)avail.BinID, BinName = avail.BinName }).ToList();
    
            return binOptions;
        }
    

    就是这样:D

    感谢大家的帮助

    【讨论】:

      猜你喜欢
      • 2010-09-09
      • 2018-01-23
      • 2013-09-24
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多