0

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

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

$(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。

任何建议将不胜感激。

4

2 回答 2

0

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

$(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

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

于 2012-12-03T10:56:35.000 回答
0

我通过使用 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

感谢所有的帮助

于 2012-12-04T10:21:21.383 回答