我制作了一个包含json格式用户名的php文件。
library(dplyr)
library(lubridate)
test %>%
mutate(Bin = if_else(as.Date(test$endTime) - as.Date(test$startTime) == 0, 1,2 )) -> df
现在我想用ajax + json检查数据库中是否已经存在用户名whick应如下所示:
[
{"korisnicko_ime":"darbranis"},
{"korisnicko_ime":"markrc"},
{"korisnicko_ime":"leoluk"},
{"korisnicko_ime":"borbau"},
{"korisnicko_ime":"ivavad"},
{"korisnicko_ime":"andtikv"},
{"korisnicko_ime":"nikohras"},
{"korisnicko_ime":"marbranis"},
{"korisnicko_ime":"ratkolev"},
{"korisnicko_ime":"antobrk"}
]
现在当我专注时,每次都会收到用户名不存在的消息。我需要帮助。
答案 0 :(得分:0)
您的javascript中有2个错误:
第一个:您希望变量value
是一个类似"darbranis"
的字符串。但是$.each
会将第一个参数作为索引(0
,1
,2
,在这种情况下依此类推,因为json
是常规数组)并且作为第二个参数的值(第一个条目的{"korisnicko_ime":"darbranis"}
)。
因此:
$.each(json, function (korisnicko_ime, value) {
if (value === kor_ime) {
应该是这样的:
$.each(json, function (arrayidx, arrayvalue) {
if (arrayvalue.korisnicko_ime === kor_ime) {
第二个错误:如果json中的用户名等于$("#poruke")
,则会写入kor_ime
。如果该json中的用户名不等于$("#greske")
,则会写kor_ime
。由于json中有很多用户名不等于kor_ime
,因此总是会写$("#greske")
。我假设“Korisnik ne postoji!”转换为“未找到用户”之类的内容,因此您很可能不喜欢这种行为。解决这个问题:
// Initialize userfound as false
var userfound = false;
$.each(json, function (arrayidx, arrayvalue) {
if (arrayvalue.korisnicko_ime === kor_ime) {
// If there is one entry with the correct username, the user is found
userfound = true;
}
});
// After the each check if user is found (one match) or not
// found (no match at all, thus still at initial value false)
if (userfound) {
$("#poruke").text("Korisnik postoji!");
console.log("Korisnik postoji!");
} else {
$("#greske").text("Korisnik ne postoji!");
console.log("Korisnik ne postoji");
}
以下代码片段中的完整演示:
var kor_ime = 'markrc';
var json = [
{"korisnicko_ime":"darbranis"},
{"korisnicko_ime":"markrc"},
{"korisnicko_ime":"leoluk"}
];
var userfound = false;
$.each(json, function (arrayidx, arrayvalue) {
if (arrayvalue.korisnicko_ime === kor_ime) {
userfound = true;
}
});
if (userfound) {
$("#poruke").text("Korisnik postoji!");
console.log("Korisnik postoji!");
} else {
$("#greske").text("Korisnik ne postoji!");
console.log("Korisnik ne postoji");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="poruke" style="color: green;"></div>
<div id="greske" style="color: red;"></div>
答案 1 :(得分:0)
改变这种方式:
$.each(json, function (korisnicko_ime, value) {
if (value === kor_ime) {
$("#poruke").text("Korisnik postoji!");
console.log("Korisnik postoji!");
} else {
$("#greske").text("Korisnik ne postoji!");
console.log("Korisnik ne postoji");
}
到此:
json.forEach(function (value) {
if (value.korisnicko_ime == kor_ime) {
$("#poruke").text("Korisnik postoji!");
//console.log("yes");
} else {
$("#greske").text("Korisnik ne postoji!");
//console.log("no");
}
});
答案 2 :(得分:0)
所以显然你的代码需要一个带有用户名的数组,但这不是你得到的。您将获得一个对象数组,其属性korisnicko_ime
包含用户名。
您应该检查if (value == kor_ime)
if (value.korisnicko_ime == kor_ime)
此外,在确定用户名不存在之前,您不会查看所有条目。您对用户名不匹配的每个条目执行不存在用户的操作。
但是不要紧,为什么你要为未经身份验证的用户提供系统中所有可能登录的列表?你意识到任何人都可以看到那个名单吗?这是一个严重的安全漏洞。不要在客户端验证敏感信息。