AJAX表现得很奇怪

时间:2015-04-16 19:08:24

标签: javascript php mysql ajax

我正在尝试将变量传递回xmlhttp.responseText。我有两个独立的功能来执行此操作。第一个是在页面加载并成功时调用的。如果我在AJAX函数中插入一个警告来检查readyState没有警告弹出(但它将与第一个一起),那么第二个调用点击并在PHP端正确执行(它在我的MYSQL数据库中进行更改) 。它也永远不会在xmlhttp.responseText中接收从PHP返回的变量。

即使PHP端的函数正在执行,有什么可能阻止readyState第二次更改?

PHP:

function checkNow()
{
global $usercrypt;
global $place;
$urow = mysql_query("SELECT Users.User FROM Users WHERE Users.User='" . $usercrypt . "';");
	if (mysql_num_rows($urow) > 0)
	{
	$favcheck = mysql_query("SELECT Users.Favorites FROM Users WHERE Users.User='" . $usercrypt . "';");
	$favcheck = mysql_fetch_array($favcheck);
	$favcheck = $favcheck[0];
		if (strpos($favcheck, $place) !== false)
		{
		$answer = 'found';
		}
		else
		{
		$answer = 'notfound';
		}
	}
	else
	{
	$answer = 'nouser';
	}
return array($answer,$favcheck);
unset($answer);
}
	
if ($perform == "0")
{
$sendback = checkNow();
echo $sendback[0];
unset($sendback);
}

if ($perform == "1")
{
global $usercrypt;
mysql_query("INSERT INTO Users (User) VALUES ('" . $usercrypt . "')");
}

if ($perform == "2")
{
$sendback = checkNow();
global $place;
global $placeid;
global $usercrypt;
$currentnum = mysql_query("SELECT Places.Favorites FROM Places WHERE Places.PlaceID=" . $placeid);
$currentnum = mysql_fetch_array($currentnum);
$currentnum = $currentnum[0];
	if ($sendback[0] == 'found')
	{
	$currentnum--;
	$change = str_replace($place,'',$sendback[1]);
	mysql_query("UPDATE Users SET Favorites='" . $change . "' WHERE User = '" . $usercrypt . "'");
	mysql_query("UPDATE Places SET Places.Favorites=" . $currentnum . " WHERE Places.PlaceID =" . $placeid);
	echo 'subtracted';
	}
	if ($sendback[0] == 'notfound')
	{
	$currentnum++;
	$change = $sendback[1] . $place;
	mysql_query("UPDATE Users SET Favorites='" . $change . "' WHERE User = '" . $usercrypt . "'");
	mysql_query("UPDATE Places SET Places.Favorites=" . $currentnum . " WHERE Places.PlaceID =" . $placeid);
	echo 'added';
	}
}

JavaScript的:

function ajaxSession()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
	z = xmlhttp.responseText;
    }
  }
}

function stateCheck()
{
ajaxSession();
xmlhttp.open('POST', thisurl + '/favoritecheck.php',true);
xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xmlhttp.send("0=" + perform + "&1=" + thisplace + ",&2=" + thisusername);
}


function firstCheck()
{
perform = 0;
stateCheck();
	if (z == 'found')
	{
	document.getElementById("favorite").src="http://www.********.com/images/favorite-on.png";
	document.getElementById("favtext").innerHTML="This is a favorite!";
	}
	if ( z == 'nouser')
	{
	perform = 1;
	stateCheck();
	}
}

function heartCheck()
{
perform = 2;
stateCheck();
	if (z == 'added')
	{
	document.getElementById("favorite").src="http://www.********.com/images/favorite-on.png";
	document.getElementById("favtext").innerHTML="This is a favorite!";
	}
	if (z == 'subtracted')
	{
	document.getElementById("favorite").src="http://www.********.com/images/favorite-off.png";
	document.getElementById("favtext").innerHTML="Add to your favorites.";
	}
}

Clicky-clicky:

if (loggedin == 1)
{
document.writeln('<img id="favorite" style="cursor: pointer;" onclick="heartCheck()" src="http://www.********.com/images/favorite-off.png" alt="Favorite" />'
+ '<br />'
+ '<div id="favtext" style="color: #D20425;">'
+ 'Add to your favorites.'
+ '</div>');
firstCheck();
} else if (loggedin == 0)
{
document.writeln('<img id="favorite" style="cursor: pointer;" src="http://www.********.com/images/favorite-off.png" alt="Favorite" />'
+ '<br />'
+ '<div id="favtext" style="color: #D20425;">'
+ '<a style="color: #800000; font-weight: bold;" href="' + thisurl + '/wp-login.php">Log in</a> to add favorites.'
+ '</div>');
}

单击运行heartCheck()。当页面加载时,firstCheck()会运行。

0 个答案:

没有答案