请允许我详细说明。 我有这个Ajax脚本,它提取一件事。 refresh_on。 它有什么作用?它返回0或1。
function startRefresh() {
setTimeout(startRefresh, 60000);
$.ajax({
url: 'refresh.php',
type: 'POST',
dataType: 'JSON',
data: {task: "reload"},
success: function(data) {
$.each(data, function(i, attr){
if (attr.refresh_on == 0) {
//this doesn't work
/*Write/return this in JavaScript:*/ line[1]="Offline.";
} else {
//this doesn't work
/*Write/return this in JavaScript:*/ line[1]="Online.";
};
})
}
});
}
如果ajax返回时使用refresh_on == 0或者refresh_on == 1 - 我希望它打印相应的数组项。 必须是一个数组项目。
</head>
<body>
<script type="text/javascript">
var line=new Array()
startRefresh();
//output either "line[1]=\"Offline.\""; or "line[1]=\"Online.\"";
</script>
</body>
这是PHP文件:
if (isset($_POST['task']) && $_POST['task'] == "reload") {
$stmt = $connection->prepare("SELECT refresh_on FROM refresh");
$stmt->execute();
$result = $stmt->get_result();
$encode = Array();
while ($row = $result->fetch_assoc()) {
$encode[] = $row;
}
echo json_encode($encode);
}
如果重要 - 这是JSON回复:
[{"refresh_on":1}]
有没有办法使用该函数插入/输出/打印数组项?
任何帮助都将不胜感激。
答案 0 :(得分:1)
所以这里可能会发生一些事情,但是首先,你要将变量包装在一个引号中,所以所发生的一切都是正在制作一个字符串并立即被丢弃到地板上。让我们从做如下的事情开始:
function startRefresh() {
setTimeout(startRefresh, 60000);
$.ajax({
url: 'refresh.php',
type: 'POST',
dataType: 'JSON',
data: {task: "reload"},
success: function(data) {
$.each(data, function(i, attr){
if (attr.refresh_on == 0) {
//this doesn't work
line[1] = "Offline.";
} else {
//this doesn't work
line[1]= "Online.";
};
})
}
});
}
现在,如果我没记错的话,ajax函数将调用你的成功回调,它将接管你的本地范围。我不相信该回调可以访问line
,所以我们应该/实际上可以将该回调移动到闭包中的自己的函数中:
<script type="text/javascript">
(function() {
var line = [];
startRefresh();
function startRefresh() {
setTimeout(startRefresh, 60000);
$.ajax({
url: 'refresh.php',
type: 'POST',
dataType: 'JSON',
data: { task: "reload" },
success: refreshResponse
});
}
function refreshResponse(data) {
$.each(data, function(i, attr) {
if (attr.refresh_on == 0) {
line[1] = "Offline.";
} else {
line[1] = "Online.";
}
});
}
})();
</script>
我们已经将它包装在一个自执行函数中,以便为我们提供一些很好的封装,并且由于line
位于找到refreshResponse的函数中,因此该变量应该是可访问的。
但我们还没有完成!
首先,我们可以轻松地使变量赋值更容易,如下所示:
line[1] = (attr.refresh_on == 0) ? "Offline." : "Online.";
......我们也希望在平等声明上加倍,以避免变量强制:
line[1] = (attr.refresh_on === 0) ? "Offline." : "Online.";
试一试,让我们看看我们在哪里。
答案 1 :(得分:0)
不确定您期望"line[1]=\"Offline.\"";
做什么,但它不会做任何事情。也许你的意思是:line[1]= "Offline";
?尝试将这行代码放在那里,以测试它是否有效:console.log('Offline');
如果该行正在执行并且您在控制台中看到输出,则您只需要定位一些要放置&#34;离线&#34; string into,例如:
<div id="status"></div>
<script>
....
var status = document.getElementById("status");
if (attr.refresh_on == 0) {
status.textContent = "Offline";
} else {
status.textContent = "Online";
};
....
</script>