Php没有将数据返回到ajax调用

时间:2017-04-19 03:05:55

标签: javascript php jquery json ajax

这是我的ajax电话:

 var urlstring = '/search/';

      $.ajax({

       url: urlstring+'model.php',
       type: 'GET',
       dataType: 'text',
       'data': 'test=1',

       error: function(xhr, status, error) {

           console.debug(error);
       },

       success: function() {

         console.log('success');
       },

       complete: function(data) {

         console.log('complete');
         console.debug(data);
       }

     });

当我更改dataType: 'json'时,我收到此错误:

  

SyntaxError:JSON.parse:第1行第1列的意外数据结尾   JSON数据堆栈跟踪:   jQuery.parseJSON@http://localhost/search/js/vendor/jquery.js:7964:9   ajaxConvert @ http://localhost/search/js/vendor/jquery.js:8246:19   做@ http://localhost/search/js/vendor/jquery.js:8707:15   。发送/回调/< @ http://localhost/search/js/vendor/jquery.js:9123:9

我从php返回了这样的数据,用于json类型:

json_encode($data);

我还尝试在返回数据之前设置标题:

header('Content-Type: application/json');

现在我尝试更改dataType: 'text'

在php文件中,

<?php

include 'config.php';

class SearchModel extends Database
{

    public $searchModel = null;

    public function __construct()
    {
        $database = new Database();

    }

    public function fetchLocations()
    {

        $query = array();
        $query[] = "SELECT * FROM `tbl_location`";

        $query = implode(' ', $query);

        $statement = self::$connection->prepare($query);
        $statement->execute();

        $data = $statement->fetchAll(PDO::FETCH_ASSOC);

        return $data;
    }
}

$searchModel = new SearchModel();
if (isset($_GET['test'])) {

    $data = $searchModel->fetchLocations();
    // header('Content-Type: application/json');
    return  $data;
}
?>

我的ajax电话没有收到数据。我发现,success在调用php文件之前先执行。我设置async:false,无济于事。

然后我在complete下面添加了success,这次我看到ajax得到的东西比我期望从服务器获得的数据更多:

  

对象{readyState:4,getResponseHeader:   .ajax / jqXHR.getResponseHeader(),getAllResponseHeaders:   .ajax / jqXHR.getAllResponseHeaders(),setRequestHeader:   .ajax / jqXHR.setRequestHeader(),overrideMimeType:   .ajax / jqXHR.overrideMimeType(),statusCode:.ajax / jqXHR.statusCode(),   中止:.ajax / jqXHR.abort(),状态:.Deferred / promise.state(),总是:   .Deferred / promise.always(),然后:.Deferred / promise.then(),11 more ...}

2 个答案:

答案 0 :(得分:0)

替换

return $data;

使用此

echo json_encode($data);

json_encode将使用json编码的字符串转换您的数组,然后在JavaScript中,您可以使用$.parseJSON(data)解析数据。

我们在使用ajax时使用 echo 而不是 return

答案 1 :(得分:0)

你需要 echo json_encode($data);以便将数据发送到XHR请求。只有return无效