【问题标题】:Ajax doesn't return JSON but an objectAjax 不返回 JSON 而是返回一个对象
【发布时间】:2013-12-29 10:26:57
【问题描述】:

我想将数据从 WCF 加载到网格 (SlickGrid)。如果我手动制作 Json 并将其加载到网格中,则此代码有效。但是,如果我使用从 Jquery - ajax 获得的变量,我会得到一个嵌入数组的对象。

如果我运行以下代码。

$(function () {
    $.ajax({
        url: "DataService.svc/DoWork",
        type: "POST",
        contentType: "application/json",
        dataType: 'JSON',
        success: loadData,
        error: showError
    });
});

function loadData(result) {
    var data = [];
        data[0] = {
            BO: "Task ",
            Agreement: "5 days"
        };
    console.log(data);
    console.log(result);
    grid = new Slick.Grid("#myGrid", data, columns, options);
}

我有 2 个控制台日志。第一个日志是我制作的 Json。第二个是 Json Ajax 返回。 Chrome 告诉我这是一个对象而不是一个数组(Json)。

如何将对象(结果)转换为像数据这样的数组结构?

【问题讨论】:

  • result.doWork 将是您想要的数组
  • 您是否尝试过使用$.parseJSON(result)?
  • var 数据 = [];数据[0] = 结果.d;
  • DataService.svc/DoWork say 你在浏览器中得到了什么..?
  • 此外,尝试将dataType 更改为 HTML 并将您发送到此 AJAX 函数的 JSON 数据编码。它在 PHP 中像这样对我有用。

标签: json wcf jquery slickgrid


【解决方案1】:

尝试换行:

var data = [];

到:

 var data = new Array();

内部函数loadData

【讨论】:

  • 它适用于数据变量。现在我想使用转换成数据之类的数组的结果。
  • 使用 push 将每个元素放入新数组中
【解决方案2】:
var data = [];
    for(var i in result) {
        data.push(result[i]);
    }

(如果 D 不够)

【讨论】:

    【解决方案3】:

    我通过在结果后添加 .d 来解决它。这将为 SlickGrid 返回正确的对象。

    function loadData(result) {
        grid = new Slick.Grid("#myGrid", result.d, columns, options); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-17
      • 2013-07-07
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      相关资源
      最近更新 更多