我想检索一些数据库数据,其中查询最初是通过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。
当我使用AJAX调用时,我收到一个空数组。
因此我想,由于异步行为,在数据库中的查询完成之前已经返回了返回值。
但我不明白为什么。我是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的内容。但这对我来说似乎不错?有人可以帮帮我吗?响应仍然是空的,但直接调用工作正常。
更新3 我测试过,如果调用成功块,就是这种情况。但是当我在ajax请求本身中记录响应数据的内容时,它已经是空的。因此,当使用POST和要发送的数据对URL进行ajax请求时,它将返回空。但是,这与POSTMAN的POST请求相同吗?正在做出回应。
答案 0 :(得分:1)
return
不会将结果发送到AJAX,您必须输出echo
。
将输出包装在json_encode()
中它是一个数组,还是除字符串或数字之外的任何其他复杂结构。我不认为总是使用json_encode
会很痛苦。