0

I'm trying to pass a variable back to xmlhttp.responseText. I have two separate functions that do this. The first is called when the page loads and is successful. The second gets called on a click and while it executes correctly on the PHP side (it makes changes in my MYSQL database) if I insert an alert into the AJAX function to check the readyState no alert pops up (but it will with the first). It also never receives the variable returned from PHP in the xmlhttp.responseText.

What could make the readyState empty the second time, even though the functions on the PHP side are executing?

PHP:

<?php

include('connect.php');

$salt = "*************";

$perform = $_POST[0];
$place = $_POST[1];
$user = $_POST[2];
$usercrypt = crypt(md5($user),$salt);
$placeid = trim($place,",");

function checkNow()
{
    global $usercrypt;
    global $place;
    global $conn;
    $urow = mysqli_query($conn, "SELECT Users.User FROM Users WHERE Users.User='" . $usercrypt . "';");
    if (mysqli_num_rows($urow) > 0)
        {
            $favcheck = mysqli_query($conn, "SELECT Users.Favorites FROM Users WHERE Users.User='" . $usercrypt . "';");
            $favcheck = mysqli_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;
        global $conn;
        mysqli_query($conn, "INSERT INTO Users (User) VALUES ('" . $usercrypt . "')");
    }

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

unset($_POST);

?>

JavaScript:

function ajaxSession()
{
    xmlhttp = undefined;
    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.";
    }
}



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>');
}
Barmar
  • 741,623
  • 53
  • 500
  • 612
Ryan
  • 23
  • 3
  • You are making an Asynchronous call, you are treating it as a synchronous one. You ordered a pizza online and you are trying to eat it before it gets to your house. – epascarello Apr 16 '15 at 22:40
  • I get the same result when it's set to false. – Ryan Apr 16 '15 at 22:40

0 Answers0