对JSON返回3996个对象的SQLike查询

时间:2014-02-19 19:52:11

标签: javascript json sqlike

我正在尝试查询JSON对象以确定用户名。但是,当我运行SQLike时,我返回了3996个对象,其中没有一个符合我要求返回的正确参数。有人能够指出我出错的地方,以及为什么我收到3996个返回的对象,而且,我怎么能把它剥离出来只返回用户名?

user.json

[
    {
        "id":1,
        "fName": "Sam",
        "lName": "Street",
        "username": "sam",
        "password": "123"
    },
    {
        "id":2,
        "fName": "Matt",
        "lName": "Mantle",
        "username": "matt",
        "password": "123"
    },
    {
        "id":3,
        "fName": "Dev",
        "lName": "Mode",
        "username": "dev",
        "password": "123"
    }
]

我在提交表单

时调用的javascript
$("#login_form").submit(function (e) {
    // prevent default action
    e.preventDefault();
    var form = $(this);
    var username = form.find("#username").val();
    var password = form.find("#password").val();

    // need to pass this as generic function when finished
    var userData = $.ajax({
        async: false,
        url: 'user.json',
        type: "GET",
        dataType: "json",
        success: function (data) {
            console.log(data);
        }
    });

    var sel = SQLike.q(
        {
            Select: ['*'],
            From: userData,
            Where: function () { return this.userData = username }
        }
    )
    console.log(sel);
});

3 个答案:

答案 0 :(得分:2)

return this.userData = username
                    ^^^

=是作业,因为你要返回一个作业,它将是真的并且每条记录都将被返回。

return this.userData === username;
                     ^^^

答案 1 :(得分:2)

除了epascarello指出的错误之外,您还需要检查'username'的值,而不是'userData'

return this['username'] === username;

答案 2 :(得分:1)

认为这是一个“部分”的答案,因为我不熟悉那个图书馆;我只是关闭他们的文档。

Ajax通常是异步的,我不建议将其同步。

$.ajax返回jqXHR;它不是您期望获得的JSON数据。

为了让生活更轻松,我会将您的SQLike代码移到ajax调用的成功函数中,如下所示:

// need to pass this as generic function when finished
var userData = $.ajax({
    url: 'user.json',
    type: "GET",
    dataType: "json",
    success: function (data) {
        console.log(data);
        var sel = SQLike.q(
        {
            Select: ['*'],
            From: data,
            Where: function () { return this.data === username }
        }
    }
});

请注意,epascarello已经解释了非赋值等于===

现在对于“部分”答案部分:虽然我不熟悉这个库,但查看他们的文档让我想知道你的Where函数应该是这样的:

return this.username === username

或者那些东西。从我所看到的,Where将被调用来过滤行(如预期的那样),this上下文将是要过滤的当前对象。