问号难以在谷歌中搜索。
这是一步一步意味着什么?
$page = isset($_POST['page'])?$_POST['page']:"0";
我猜这意味着如果Post['page']
被设置使用该值,如果不使用0
?但我没有详细说明。我也var_dump($page)
时得到"NaN"
;即使POST['page']
尚未设置为任何内容。发生了什么事?
- >为了完全公开,我使用这个Javascript函数来传递page..的值,以便加载更多" /分页功能。
$(function(){
$("#more").click(loadPosts);
loadPosts();
var count = 0;
var num = 2;
function loadPosts() {
$(".loading").show("fast");
count += num;
$.post("load.php", {'page': count}, function(data){
$("#contents").append(data);
$(".loading").hide("fast");
});
}
});
答案 0 :(得分:3)
?
运算符称为三元运算符,您可以查看更多有关它的信息。但你理解正确。
基本上代码意味着:如果变量已设置,则使用它,否则默认为0.(在php严格模式下,您无法访问不存在的数组索引,因此此代码可以避免该错误。)< / p>
NaN不是一个数字 - 但PHP不使用(编辑:很少使用),它可能是从Javascript发送的,很可能是因为你试图将数字除以0(大概是在计算页面的上下文中) )。我发布的代码中没有看到任何内容,但也许它发生在其他地方。
答案 1 :(得分:3)
VARIABLE = (CONDITION) ? VALUE1 : VALUE2;
是
if (CONDITION)
VARIABLE = VALUE1;
else
VARIABLE = VALUE2;
您可以使用类似的表示法来缩写传统的if-else
语句:
(CONDITION) ? FUNCTION1 : FUNCTION2;
是
if (CONDITION)
FUNCTION1;
else
FUNCTION2;
答案 2 :(得分:3)
?:
语法称为ternary operator,完全符合您的想法。如果第一部分(在?
之前)是真实的,则使用第一个选项(在:
之前);如果没有,第二个选项是。
您收到的错误是因为您尚未设置数字值。这是浏览器读取代码的方式:
$(function(){
function loadPosts() {
$(".loading").show("fast");
count += num;
$.post("load.php", {'page': count}, function(data){
$("#contents").append(data);
$(".loading").hide("fast");
});
}
var count;
var num;
$("#more").click(loadPosts);
loadPosts();
count = 0;
num = 2;
});
正如您所看到的,count += num
将在 var count = 0
和var num = 2
运行之前设置,因为loadPosts()
在设置之前运行。这是因为称为“提升”的东西,其中函数和变量声明被移动到其包含范围的最顶层。
因为您尝试将undefined
添加到undefined
(因为尚未设置任何变量),您会得到NaN
:“不是数字”。要解决此问题,请在调用loadPosts
之前将函数和变量声明移到范围顶部:
$(function(){
function loadPosts() {
$(".loading").show("fast");
count += num;
$.post("load.php", {'page': count}, function(data){
$("#contents").append(data);
$(".loading").hide("fast");
});
}
var count = 0;
var num = 2;
$("#more").click(loadPosts);
loadPosts();
});
答案 3 :(得分:0)
isset($_POST['page']) ? $_POST['page'] : "0";
是一个三元if声明。条件是?
之前的部分。 ?
之后的第一部分是表达式为true时要赋值的值。 :
之后的部分是由表达式的假值产生的赋值。
答案 4 :(得分:0)
它被称为ternary operator
您的第二个问题 - $_POST['page']
和$page
不一样,如果要检查变量,则需要测试$ _POST变量。
答案 5 :(得分:0)
您的javascript将NaN作为字符串传递给您的PHP脚本。你可以试试这个:
$page = isset($_POST['page']) && $_POST['page'] != "NaN" ? $_POST['page'] : "0";
或者你可以改变你的javascript来做那边的检查:
count += num;
if (isNaN(count))
{
count = 0;
}