JQuery Ajax获得不同类型的变量在javascript与PHP比较


JQuery Ajax Get different type of variable in javascript compare with PHP

在我的php代码中,我返回变量的对象类型。然而,在JQuery ajax成功返回数据是字符串数据的形式。我使用JSON.parse(data)将数据解析成JSON形式。但是由于返回字符串数据的格式,我不能这样做。我可以知道我如何在php中返回JSON对象,同时在我的JQuery $ajax函数也会得到JSON对象,而不是字符串。以下是我的代码:

Javascript:

$(document).ready(function callAjax(){
        $.ajax({
            type: "GET",
            url: "php/test.php",
            cache: false,
            success: function(data){
                console.log( data);
                 interval = setTimeout(callAjax, 1000);  
            }
        })
});
PHP:

<?php
    require('test2.php');
   $messages = get_msg();
    if (is_array($messages) || is_object($messages)){
        foreach($messages as $message){
      $array = array('chat_id' => $message['chat_id'], 
                    'sender_name' => $message['sender_name'],
                    'chat_body' => $message['chat_body'], 
                    'chat_time' => $message['chat_time']);
      $object = (object) $array;
            echo json_encode(gettype ($object));
        }
    }else{
        echo "Nothing";
    }
?>

在ajax调用中添加dataType:'json'

你必须让他知道你从ajax调用中得到了什么样的数据。此外,如果条件失败,则发送一个数组,如

json_encode(array('state'=>'nothing'));
php代码

 require('test2.php');
   $messages = get_msg();
    if (is_array($messages) || is_object($messages)){
        foreach($messages as $message){
      $array = array('chat_id' => $message['chat_id'], 
                    'sender_name' => $message['sender_name'],
                    'chat_body' => $message['chat_body'], 
                    'chat_time' => $message['chat_time']);
      $object = (object) $array;
            echo json_encode(array('state'=>gettype($object)));
        }
    }else{
        echo json_encode(array('state'=>'nothing'));
}
Javascript

$(document).ready(function callAjax(){
        $.ajax({
            type: "GET",
            url: "php/test.php",
            cache: false,
            dataType:'json',
            success: function(data){
                 try {
                    data = jQuery.parseJSON(data);
                  }
                  catch (err) {
                     data = typeof data == 'object' ? data : jQuery.parseJSON(data);
                }
                 console.log(data.state);
                 interval = setTimeout(callAjax, 1000);  
            }
        })
});