Php Symfony2与Ajax一起使用,以获取理论中的查询结果
更新 我在广告库中的作用Php Symfony2与Ajax一起使用,以获取理论中的查询结果,php,jquery,ajax,symfony,doctrine-orm,Php,Jquery,Ajax,Symfony,Doctrine Orm,更新 我在广告库中的作用 public function findByExceptOwner($paramFetcher) { $query = $this->getEntityManager()->createQueryBuilder('ad'); // parâmetros iniciais da query: status, departure de destination $query->select(
public function findByExceptOwner($paramFetcher)
{
$query = $this->getEntityManager()->createQueryBuilder('ad');
// parâmetros iniciais da query: status, departure de destination
$query->select('ad');
if(array_key_exists('type', $paramFetcher)){
$query->from('DelivveWebBundle:' . $paramFetcher['type'], 'ad');
}else{
$query->from('DelivveWebBundle:Ad', 'ad');
}
$query
->where('ad.owner <> :ownerId')
->andWhere($query->expr()->eq('ad.status', ':status'))
->andWhere('ad.dateFinal <= :today')
->setParameter('ownerId', $paramFetcher['ownerId'])
->setParameter('status', 'new')
->setParameter('today', new \DateTime("now"));
if (array_key_exists('departure',$paramFetcher)) {
$departureArray = preg_split('/ - /', $paramFetcher['departure']);
$departureCityArray = preg_split('/,/', $departureArray[count($departureArray) - 2]);
$departureUFArray = preg_split('/,/', $departureArray[count($departureArray) - 1]);
$departure = $departureCityArray[count($departureCityArray) - 1] . ' - ' . $departureUFArray[0];
$query
->andWhere($query->expr()->like('ad.departure', ':departure'))
->setParameter('departure', "%{$departure}%");
}
if (array_key_exists('destination',$paramFetcher)) {
$destinationArray = preg_split('/ - /', $paramFetcher['destination']);
$destinationCityArray = preg_split('/,/', $destinationArray[count($destinationArray) - 2]);
$destinationUFArray = preg_split('/,/', $destinationArray[count($destinationArray) - 1]);
$destination = $destinationCityArray[count($destinationCityArray) - 1] . ' - ' . $destinationUFArray[0];
$query
->andWhere($query->expr()->like('ad.destination', ':destination'))
->setParameter('destination', "%{$destination}%");
}
// raio de busca com centro nas coordenadas de departure
if (array_key_exists('departure_latitude', $paramFetcher) && array_key_exists('departure_longitude', $paramFetcher) && array_key_exists('radius', $paramFetcher)) {
$query
->andWhere('earth_distance_operator(earth_box(ll_to_earth(:departure_lat, :departure_lon), :radius), \'@>\', ll_to_earth(ad.departureLatitude, ad.departureLongitude)) = true')
->setParameter('departure_lat', floatval($paramFetcher['departure_latitude']), \Doctrine\DBAL\Types\Type::FLOAT)
->setParameter('departure_lon', floatval($paramFetcher['departure_longitude']), \Doctrine\DBAL\Types\Type::FLOAT)
->setParameter('radius', floatval($paramFetcher['radius']) / 1.609, \Doctrine\DBAL\Types\Type::FLOAT);
}
// raio de busca com centro nas coordenadas de destionation
if (array_key_exists('destination_latitude', $paramFetcher) && array_key_exists('destination_longitude', $paramFetcher) && array_key_exists('radius', $paramFetcher)) {
$query
->andWhere('earth_distance_operator(earth_box(ll_to_earth(:destination_lat, :destination_lon), :radius), \'@>\', ll_to_earth(ad.destinationLatitude, ad.destinationLongitude)) = true')
->setParameter('destination_lat', floatval($paramFetcher['destination_latitude']), \Doctrine\DBAL\Types\Type::FLOAT)
->setParameter('destination_lon', floatval($paramFetcher['destination_longitude']), \Doctrine\DBAL\Types\Type::FLOAT)
->setParameter('radius', floatval($paramFetcher['radius']) / 1.609, \Doctrine\DBAL\Types\Type::FLOAT);
}
return $query->getQuery()->getResult();
}
我的路线是这样写的
search_ads:
pattern: /ad/search
defaults: { _controller: DelivveWebBundle:Ad:searchAds }
我的函数是ajax
$(window).load(function() {
var url = window.location.href;
var urlArray = url.split("/");
var path = urlArray[0]+"//"+urlArray[2];
var departureLatitude = $("#bundle_ad_departureLatitude").val();
var departureLongitude = $("#bundle_ad_departureLongitude").val();
$.post(path+"{{ path('search_ads') }}",
{departure_lat: departureLatitude, departure_long: departureLongitude},
function (entities){
alert("success ");
console.log(entities);
$(".panel-foot-information").remove();
$div = "<div class='panel-foot-information row big-not-visible'>";
if (entities != null){
$div = $div + "<table id='ads'><thead><tr><th>Departure</th><th>Destination</th></tr></thead><tbody>";
$.each( entities, function( key, value ) {
$div = $div + "<tr class='ad-tr'>";
$div = $div + "<td class='hidden'><input type='hidden' id='idLat' value="+ value.departureLatitude +"/></td>";
$div = $div + "<td class='hidden'><input type='hidden' id='idLong' value="+ value.departureLongitude +"/></td>";
$div = $div + "<td>"+ value.owner.username +"</td>";
$div = $div + "<td>"+ value.departure +"</td>";
$div = $div + "<td>"+ value.destination +"</td>";
$div = $div + "<td class='packageType'>"+ value.packageType +"</td>";
$div = $div + "<td class='transportation'>"+ value.transportation +"</td>";
$div = $div + "<td class='price'>"+ value.price +"</td>";
$div = $div + "<td class='date'>"+ value.date + " - " + value.dateFinal +"</td>";
$div = $div + "</tr>";
alert($div)
});
$div = $div + "</tbody></table></div>";
}
$div = $div + "</div>";
$(".panel-middle").append($div);
}, "json"
);
});
$(窗口).load(函数(){
var url=window.location.href;
var urlArray=url.split(“/”);
var path=urlArray[0]+“/”+urlArray[2];
var departureLatitude=$(“#bundle_ad_departureLatitude”).val();
var departureLongitude=$(“#bundle_ad_departureLongitude”).val();
$.post(路径+“{{path('search_ads')}}}”,
{出发时间:出发纬度,出发时间:出发经度},
职能(实体){
警惕(“成功”);
控制台日志(实体);
$(“.panel foot information”).remove();
$div=“”;
if(实体!=null){
$div=$div+“出发目的地”;
$.each(实体、功能(键、值){
$div=$div+“”;
$div=$div+“”;
$div=$div+“”;
$div=$div+“”+value.owner.username+“”;
$div=$div+“”+value.department+“”;
$div=$div+“”+value.destination+“”;
$div=$div+“”+value.packageType+“”;
$div=$div+“”+value.transportation+“”;
$div=$div+“”+value.price+“”;
$div=$div+“”+value.date+“”-“+value.dateFinal+”;
$div=$div+“”;
警报($div)
});
$div=$div+“”;
}
$div=$div+“”;
$(“.panel middle”)。追加($div);
},“json”
);
});
我尝试了另一种解决方案,以帮助那些看到我之前的问题的人
在stackoverflow中的几个人进行了大量的搜索和怀疑后,我发现他可能会找到它,但当我回到ajax时,他有一张对象类型的照片,这毫无意义
有人知道怎么做吗?错误在于JasonResponse无法序列化我的类,然后操纵它在jQuery中对结果进行迭代
public function searchAdsAction(Request $request)
{
...
$data = array();
foreach($entities as $ad){
$adArray = array();
$adArray["departureLatitude"] = $ad->getDepartureLatitude();
$adArray["departureLongitude"] = $ad->getDepartureLongitude();
$adArray["owner_username"] = $ad->getOwner()->getUserName();
$adArray["departure"] = $ad->getDeparture();
$adArray["destination"] = $ad->getDestination();
$adArray["packageType"] = $ad->getPackageType();
$adArray["price"] = $ad->getPrice();
$data[] = $adArray;
}
return new JsonResponse($data);
}
直接在浏览器中打开该页面并检查日志,以查看是什么触发了500错误。您可以从问题中删除AJAX代码,因为它似乎与500错误无关。在将输出与AJAX一起使用之前,请检查控制器是否工作。很抱歉,我不理解您的评论。如果您的AJAX因为500错误而无法工作,请在继续之前修复它。谢谢!你的帖子帮助了我!
public function searchAdsAction(Request $request)
{
...
$data = array();
foreach($entities as $ad){
$adArray = array();
$adArray["departureLatitude"] = $ad->getDepartureLatitude();
$adArray["departureLongitude"] = $ad->getDepartureLongitude();
$adArray["owner_username"] = $ad->getOwner()->getUserName();
$adArray["departure"] = $ad->getDeparture();
$adArray["destination"] = $ad->getDestination();
$adArray["packageType"] = $ad->getPackageType();
$adArray["price"] = $ad->getPrice();
$data[] = $adArray;
}
return new JsonResponse($data);
}