#javascript #php #jquery #ajax #laravel
#javascript #php #jquery #ajax #laravel
Вопрос:
Я отправляю ответ от контроллера laravel после сортировки. ответ отсортирован.
public function search(Request $request)
{
$providers = Provider::get()->map(function($item) use($request){
$item->setAttribute('distance',$this->addDistanceToProvider($item,$request)) ;
return $item;
})->sortBy('distance');
return $providers;
}
ответ
{"1":{"id":2,"owner_name":"hjjk","owner_email":"bilal@gmail.com","owner_phone":"4567898765432","name":"hgjjj","email":"devyempresas@gmail.com","phone":"","password":"$2y$10$9KmwSmKcxQNHxN6/KmViQOVgGOIbsTxnPDd.prkTpK9BfVMJ0CXpm","rfc":"12344","tax":"67","location":"Nezahualcu00f3yotl, State of Mexico, Mexico","longitude":"-98.9896643","latitude":"19.3994934","comission":76,"status":1,"distance":314.703},"2":{"id":3,"owner_name":"abc","owner_email":"asphaltairborne316@gmail.com","owner_phone":"06767672626","name":"Bilal Arshad","email":"swift.solutions.com@gmail.com","phone":"","password":"$2y$10$mLRpt7O2o0wdg8AecgpWA.4xfN9hV4VaG.JRSZyr/hUoKPjkCkdvm","rfc":"asd","tax":"234","location":"Cuernavaca, Morelos, Mexico","longitude":"-99.22156590000002","latitude":"18.9242095","comission":113,"status":1,"distance":369.312},"0":{"id":1,"owner_name":"bilal","owner_email":"swift.solutions.com@gmail.com","owner_phone":"0213123132131","name":"Bilal Arshad","email":"admin@admin.com","phone":"","password":"$2y$10$BUgsN4Qknk2M/LNQwQoOrOOad.pu9dFQUiylFSSTgaRrQwDIbDhqG","rfc":"12344","tax":"dasdasd","location":"Nuevo Laredo, Tamaulipas, Mexico","longitude":"-99.68859527909136","latitude":"27.784235863652583","comission":877,"status":1,"distance":1034.684}}
Но когда я вижу предварительный просмотр в brwoser, он не сортируется, и Jquery отображает данные в несортированном виде
Функция Jquery
$.each(data, function(index, provider) {
embedData(index,provider)
});
function embedData(index,provider){
$('#provider_area').append(` <div class="kt-widget5__item" ><div class="kt-widget5__content">
<div class="kt-widget5__section">
<a href="#" class="kt-widget5__title">
${provider.name}
</a>
<p class="kt-widget5__desc">
${provider.location}
</p>
<div class="kt-widget5__info">
<span>Distance:</span>
<span class="kt-font-info" >${provider.distance}</span>
</div>
</div>
</div>
<div class="kt-widget5__content">
</div></div>`)
}
Комментарии:
1. Объекты не отсортированы. Ваш ответ — это объект. Но похоже, что вы заказали ключи?
2. Я думаю, что это сортировка на основе идентификаторов во внешнем интерфейсе
Ответ №1:
Поскольку объекты не отсортированы в javascript, вы можете попытаться отсортировать их следующим образом
//Assume variable data contains the response data
//convert the object of objects to array of objects
let arr = Object.keys(data).map((key) => data[key]);
//Sort the array of objects by distance
let sorted = arr.sort((a,b) => a.distance - b.distance);
//use sorted in the function
$.each(sorted, function(index, provider) {
embedData(index,provider)
});