更好的JSON数据结构

时间:2013-09-11 16:45:05

标签: jquery json

我有以下jQuery代码,它工作正常,我能够在服务器中正确反序列化。

但是当我尝试创建一个变量并将其作为JSON对象传递时,它不起作用。 (注释的代码不起作用。值没有正确到达服务器。)

参考:http://www.json.org/js.html

我们如何正确地为JSON对象定义变量?

$(".searchCostPages").click(function () {


        var url = '/SearchDisplay/' + 'TransferSearchCriteria';

        //var searchCriteria = {};
        //searchCriteria.Accrual = "A";
        //searchCriteria.Brand = "B";

    //$.getJSON(url, {searchCriteria: searchCriteria
        //}, function (data) {
        //    if (data.length) {
        //        alert('Success');
        //    }

        //});

        $.getJSON(url, {
            "Accrual": "A",
            "Brand": "B"
                    }, function (data)
                    {
                        if (data.length)
                        {
                            alert('Success');
                        }

                    });



    });

工作 - 网络标题:

enter image description here

不工作 - 网络标题:

enter image description here

更新

以下代码在这里工作。另请参阅jQuery Ajax parameters are not formatted properly

    var searchCriteria = {};
    searchCriteria.Accrual = "A";
    searchCriteria.Brand = "B";

    $.getJSON(url, searchCriteria
    , function (data) {
        if (data.length) {
            alert('Success');
        }

    });

2 个答案:

答案 0 :(得分:4)

您的两个示例未将data参数传递给$.getJSON()

工作示例传递此对象:

{
    Accrual: "A",
    Brand: "B"
}

非工作示例传递此对象:

{
    searchCriteria: {
        Accrual: "A",
        Brand: "B"
    }
}

看到区别?

要修复将{ searchCriteria: searchCriteria }传递到$.getJSON()的非工作示例,您可以将其更改为searchCriteria,从而删除额外级别的对象。

另请注意,这些是您在此处使用的JavaScript对象,而不是JSON。例如,您不必按照JSON的要求引用"Accrual"之类的属性名称。 (引用属性名称不会有任何损害,它只是在JavaScript对象中没有必要。)知道何时专门处理JSON以及处理普通JavaScript对象时,这很有用,因为它们是不一样的。

答案 1 :(得分:0)

您的注释代码将不同的对象传递给未注释的代码

评论数据(非工作):

{
    searchCriteria: {
        Accrual: "A",
        Brand: "B"
    }
}

未注释的数据(工作):

{
    Accrual: "A",
    Brand: "B"
}

原来评论的ajax请求应该是:

$.getJSON(url, searchCriteria, function (data) {
    if (data.length) {
        alert('Success');
    }
});