简体   繁体   中英

How do I call a PHP function using AJAX, and get the returned value?

I want to call a specific function from my database.php file, and get the returned value. Here I am trying to do this:

js:

function submit_verification_code(){
$.ajax({
url: "database.php",
type: "post",
data: ({
    'code': code_entered,
}),
dataType:"text",
context: this,
success : function(response) {
    console.log('RESPONSE: ' + response);
    //OPTIONAL_FUNCTION_TO_DO_SOMETHING_WITH_THE_RESPONSE(response);
},
error: function(jqXHR,textStatus,errorThrown){
    //OPTIONAL_FUNCTION_TO_DO_SOMETHING_WITH_THE_ERROR(jqXHR);
    console.log(errorThrown);
}
});
}

database.php

 if(isset($_POST['code'])){
    does_code_match($_POST['code']);
 }
 function does_code_match($code){

    connect();
            die('test');
    $sql = 'select * from emailstobeverified where email=';
    $sql .= "'" . $_SESSION['email'] . "'";
    $sql .= ' and verification_code=';
    $sql .= $code;
    $sql .= ';';
    $count = query($sql)->num_rows;

    die(strval($count));
    disconnect();
    echo strval($count);
    exit;
    //Once you've outputted, make sure nothing else happens
 }

does_code_match function executes, and the console log prints <br /> when console.log("RESPONSE" + response) is called. But I want it to print the value of $count

EDIT:

There is a problem with connect() function. If I call die('test') just before calling connect() , it returns a response! It says "hello world" in the console. If I call it directly AFTER calling connect() , it prints this:

<b>Warning</b>:  Use of undefined constant conn - assumed 'conn' (this will throw an Error in a future version of PHP) in <b>C:\xampp2\htdocs\database.php</b> on line <b>72</b><br />
<br />
<b>Warning</b>:  Use of undefined constant dbhost - assumed 'dbhost' (this will throw an Error in a future version of PHP) in <b>C:\xampp2\htdocs\database.php</b> on line <b>72</b><br />
<br />
<b>Warning</b>:  Use of undefined constant dbuser - assumed 'dbuser' (this will throw an Error in a future version of PHP) in <b>C:\xampp2\htdocs\database.php</b> on line <b>72</b><br />
<br />
<b>Warning</b>:  Use of undefined constant dbpass - assumed 'dbpass' (this will throw an Error in a future version of PHP) in <b>C:\xampp2\htdocs\database.php</b> on line <b>72</b><br />
<br />
<b>Warning</b>:  Use of undefined constant db - assumed 'db' (this will throw an Error in a future version of PHP) in <b>C:\xampp2\htdocs\database.php</b> on line <b>72</b><br />
test

and the response is <br />

Connect function:

 $dbhost = "localhost";
 $dbuser = "root";
 $dbpass = "";
 $db = "example";
 $conn;
 function connect(){
    $GLOBALS[conn] = new mysqli($GLOBALS[dbhost], $GLOBALS[dbuser], $GLOBALS[dbpass],$GLOBALS[db]) or die("Connect failed: %s\n". $GLOBALS[conn] -> error);
 }

Change your jQuery to the following:

$.ajax({
    url: "database.php",
    type: "post",
    dataType: "json",
    data: ({
        code: code_entered,
    }),
    context: this,
    success : function(response) {
        console.log(response);
        //OPTIONAL_FUNCTION_TO_DO_SOMETHING_WITH_THE_RESPONSE(response);
    },
    error: function(jqXHR,textStatus,errorThrown){
        console.log(jqXHR);
        //OPTIONAL_FUNCTION_TO_DO_SOMETHING_WITH_THE_ERROR(jqXHR);
    }
});

Then change your PHP to the following:

 if(isset($_POST['code'])){
    does_code_match($_POST['code']);
    //no need to call echo again
 }

 function does_code_match($code){
     connect();
    $sql = 'select * from emailstobeverified where email=';
    $sql .= "'" . $_SESSION['email'] . "'";
    $sql .= ' and verification_code=';
    $sql .= $code;
    $sql .= ';';
    error_log('Adding code to be verified with query: ' . $sql);
    $count = query($sql)->num_rows;
    disconnect();
    //I can't speak for the above code, I'm assuming it works.

    error_log("CODE MATCHES? "  . $count);
    error_log(json_encode($count));
    //Not sure why you're doing this, but I assume it's for testing only

    echo json_encode($count);
    exit;
    //Once you've outputted, make sure nothing else happens
 }

What kind of stuff do you see in your console.log(response); output? Once you start developing your environment, you will probably start to send back an array of responses instead of just a value.

just echo $count

$count = query($sql)->num_rows;
disconnect();
echo $count;

If you encode the count, on the receiving end, you will have to decode the json first.

When referencing array keys, you must enclose them in quotes, change your function to the following:

function connect(){
    $GLOBALS['conn'] = new mysqli($GLOBALS['dbhost'], $GLOBALS['dbuser'], $GLOBALS['dbpass'],$GLOBALS['db']) or die("Connect failed: %s\n". $GLOBALS['conn'] -> error);
 }

Also, in general, this is a strange way of storing global variables, you should look into using the $_ENV array instead.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM