简体   繁体   中英

response from php to javascript via json

I have this function in php

public function get_updated_session_value()
{
    $sql = "SELECT IF(Session = 12345678 , 1,0) AS login FROM `psf_users` WHERE id = 236";
    $var = $this->addDb($sql)->execute();
    $Session = $var['login'];

    return json_encode('2');
}

and the javascript code to fetch this value,

 function check() {
     $.ajax({
         url : 'auctions.php',
         type : 'get',
         // dataType: 'json',
         data : {page:'__request', module:'PSF_auctions', action:'get_updated_session_value'},
         success: function(data) { 
             console.log(data);
         }
     });      
 }

also, this function runs every 5 seconds via

setInterval(check, 5000);

the problem is, console.log(data); prints nothing, i believe that means it is not getting any data (or json response) from the php function. am i missing something?

Replace return with echo like this:

public function get_updated_session_value()
   {

    $sql="SELECT IF(Session = 12345678 , 1,0) as login FROM `psf_users` WHERE id=236";
    $var= $this->addDb($sql)->execute();
    $Session= $var['login'];
      echo json_encode('2');
   }

It can't work as you're returning the value. The difference between returning a value and emitting a response is that the latter writes a response on the HTTP stream whilst the first one merely returns the control to the parent with a specific value.

Sanjay has spotted it very well, and I'd recommend that you use a very simple function to wrap up your responses:

function emit_response( $status_code, $data ) {

    http_response_code( $status_code ); // 200 is it's success. find more http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

    die( json_encode( array(
        "status_code" => $status_code,
        "data" => $data )));
}

Then modify that echo (though it's fine as well) with

emit_response( 2 );

and since the response is valid JSON, JavaScript will love it; in your callback, you can simple do this:

success: function(res) {
     var response = JSON.parse( res );
    // response.data will be 2. :)

// ... rest of the code ... 

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