我正在尝试查询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);
});
答案 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
上下文将是要过滤的当前对象。