使用AJAX进行PHP异步函数调用

时间:2015-04-23 18:07:39

标签: php mysql ajax

我想检索一些数据库数据,其中查询最初是通过AJAX调用执行的。

JAVASCRIPT

$('form[incidentForm]').on('submit', requestResponders  );

var requestResponders = function(e) {
    e.preventDefault();
    getResponders(latitude, longitude, function(data) {
        console.log(data);
    });
}

function getResponders(latitude, longitude, callback) {

    var geoInformation = [];
    geoInformation.push({name:'latitude', value:latitude});
    geoInformation.push({name:'longitude', value:longitude});

    $.ajax({
        type: "POST",
        url: '../searchResponders',
        data: geoInformation,
        success: function(responders) {
            callback(responders);
        }
    })
};

路线

Route::post('searchResponders','RespondersController@getAvailableResponders');

PHP

public function getAvailableResponders(Request $request) {
    $data = $request->all();
    $responder = ResponderManagement::searchResponders($data);
    return $responder;
}

public function searchResponders($geoInformation) {
    $lat = $geoInformation['latitude'];
    $lng = $geoInformation['longitude'];
    $results = DB::select(DB::raw("SELECT STATEMENT));
    return $results;
}

当我使用POSTMAN检查功能时,一切正常。我希望得到响应,并返回一个带有搜索的数据库条目的json。

enter image description here

当我使用AJAX调用时,我收到一个空数组。 enter image description here enter image description here

因此我想,由于异步行为,在数据库中的查询完成之前已经返回了返回值。

但我不明白为什么。我是ajax调用,仅在成功时我调用回调方法来显示数据。所以我猜想数据库查询应该已经完成​​了。

有人可以在这里支持我吗?

更新1: 我现在更新了我的功能

public function searchResponders($geoInformation) {
    $lat = $geoInformation['latitude'];
    $lng = $geoInformation['longitude'];
    $results = DB::select(DB::raw("SELECT STATEMENT));
    echo json_encode($results);
}

但是在控制台中登录时返回的值仍为空。而在POSTMAN POST调用中,所有内容都会返回

更新2 我抓住了一个屏幕截图,显示了在chrome调试器中调用AJAX的内容。但这对我来说似乎不错?有人可以帮帮我吗?响应仍然是空的,但直接调用工作正常。

enter image description here

更新3 我测试过,如果调用成功块,就是这种情况。但是当我在ajax请求本身中记录响应数据的内容时,它已经是空的。因此,当使用POST和要发送的数据对URL进行ajax请求时,它将返回空。但是,这与POSTMAN的POST请求相同吗?正在做出回应。

1 个答案:

答案 0 :(得分:1)

return不会将结果发送到AJAX,您必须输出echo。 将输出包装在json_encode()中它是一个数组,还是除字符串或数字之外的任何其他复杂结构。我不认为总是使用json_encode会很痛苦。