我正在使用AJAX和PHP设计一个php应用程序。 但我的php文件中的if语句出乎意料。 请求方法是'POST'; Ajax代码是
function fetchData(){
var recipename = document.getElementById("recipe").value;
var calorie = false;
createRequestObject();
//window.alert(calorie);
var url = "reciepinfo.php";
xmlHttp.open("POST",url,true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
window.alert(calorie);
xmlHttp.send("recipe="+recipename+"&calorie="+calorie);
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState===4 && xmlHttp.status===200){
document.getElementById("target").innerHTML = xmlHttp.responseText;
}
}
}
php代码是:
<?php
$_SESSION['flag']=false;
if($_SESSION['flag']==false){
session_start();
$_SESSION['flag']=true;
}
$recipename = $_REQUEST['recipe'];
$calorie = $_REQUEST['calorie'];
echo $calorie;
$calorietemp = 0;
//echo $recipename;
$database = "nutrition";
$link = mysqli_connect('localhost','root','',$database);
$query = "select * from recipestb where name='$recipename'";
//$result = mysqli_query($link,$query);
//$obj = mysqli_fetch_object($result);;
if($link){
$result = mysqli_query($link,$query);
$obj = mysqli_fetch_object($result);
//$arr = mysqli_fetch_array($result);
//$names = "";
if(is_object($obj)){
echo "<i/>";
echo "<font size='5'>";
echo "Recipe name: ".$obj->name;
echo '<br/>';
echo "Carbohydrates : ".$obj->carbs." grams";
echo '<br/>';
echo "Proteins: ".$obj->protein." grams";
echo '<br/>';
echo "Fat: ".$obj->fat." grams";
echo '<br/>';
echo "Calories: ".$obj->calorie." cal";
$calorietemp = $obj->calorie;
echo '<br/>';
}else{
echo "non object";
}
}else{
echo "Connection failed";
}
if($calorie==true){
echo $calorie;
$_SESSION['caloriecount'] = $_SESSION['caloriecount'] + $calorietemp;
echo "Total calorie in diet :".$_SESSION['caloriecount'];
}
我的会话处理很奇怪我接受,但忽略了这一点,即使变量卡路里显式设置为false,if块也会执行.echo $ calorie语句也会执行,它会将$ calorie显示为false。 我并没有完全弄清楚出了什么问题。 对此几乎感到恼火。 有人可以帮忙吗?
EDIT1: php代码很好...... Ajax代码有一些问题...... 当我在PHP代码中将$ calorie设置为false时.. 它表现得很好..
答案 0 :(得分:2)
将会话处理放在一边,$卡路里问题...... 您通过AJAX将数据作为字符串传递。
$calorie = 'false';
var_dump((true == $calorie));
您将永远得到bool(true)
。使用上面的AJAX示例,请尝试使用此代码段(并使用POST而不是REQUEST):
$calorie = ('true' == $_POST['calorie']);
var_dump($calorie);
// produces `bool(false)`
答案 1 :(得分:0)
作为初学者,我不知道值为false的java脚本变量是作为字符串传递的,而#34; false&#34;到像PHP这样的服务器端脚本。
如果我们使用boolval(),在PHP中可以解决此问题。 PHP boolval()
根据我的需要,我将java脚本中的$ calorie设置为0或1。 当我想将false值发送到PHP脚本时,我将java-script中的$ calorie设置为0,相应的PHP脚本中的boolval()将其评估为false。 所以问题就解决了。