如果控制器在没有 - > gt; take()的情况下查询数据库,则Ajax调用返回500;其他明智的200

时间:2017-03-02 21:58:18

标签: jquery ajax laravel

我为客户编写了一个谷歌地图页面,其中包括从头开始编写的绘图搜索功能,如绘制多边形以返回多边形内的位置。

本地主机上的一切正常。

完成多边形(将最后一段拖动到原始起点)后,ajax会调用一个函数,该函数使用在普通非多边形搜索中使用的相同数据库查询来搜索数据库。但是,如果不包含 - > take()参数,我无法使大坝工作。这对我来说毫无意义。

控制器 - 我已经取出了一些不必要的代码部分,以便于阅读,但您可以看到它是一个常规的旧数据库查询。如果我将 - > orderBy替换为 - > take(某些数字小于或等于total),它可以正常工作。

<script>
//Call the getData() function every 1000 millisecond
setInterval("getData()",1000);
function getData(){
$.ajax({
type: "Get",
dataType: "json",
url:'Home/GetChatData',//Your action link
contentType:"application/json;charset=utf-8",
success: function(data) {
    $("#ChatArea").html('<span>'+data.ChatReferenceTime+ '</span><br/><span>'+data.ChatReferenceContent+'</span>');
}
});
}
</script>

视图

$searchResults = DB::table('properties')
->leftJoin('propImages', 'properties.L_ListingID', '=', 'propImages.L_ListingID')
->where($propertiesArray)
->whereIn('LM_Char10_1', $waterArray)
->whereIn('L_Class', $propTypes)
->when($residential==1, function($query) use ($bed, $bath) {// when residental is true, get beds/bath criteria return
    $query->where([['L_Keyword3', '>=', $bed],['LM_Int1_1', '>=', $bath]]);  
}); 
$sr = $searchResults->orderBy('L_AskingPrice', 'asc')->get();

这不是一个令牌问题,因为我仍然可以让ajax工作。我傻了。任何帮助将不胜感激。

---- 更新 ---

网络响应为500.我以预览的形式得不到任何回复。没有laravel错误消息

我的日志文件。

我应该像这样附上几行吗?:

google.maps.event.addListener(drawingManager, 'polygoncomplete', function (polygon) {

                        console.log('polygon complete');
                        $('#overMapLoadIcon').css('display', 'inline');
                        //Hide drawl button
                        $('#deletePoly').css('display', 'inline');
                        $('#updatePolySearch').css('display', 'inline');
                        drawingManager.setOptions({
                          drawingControl: false
                        });
                        //Set draw mode to hand
                        drawingManager.set('drawingMode');

                        polyPoints = [];// create an arry of all the point's GPS coords in the polygon by looping through them
                          for (var i = 0; i < polygon.getPath().getLength(); i++) {//For Each Polygon point
                              var poylygonCoord = polygon.getPath().getAt(i).toUrlValue(6);

                              var coords = poylygonCoord.split(",");
                              var lat = coords[0];
                              var lng = coords[1];
                              polyPoints.push([lat,lng]);
                              //console.log(lat+'    '+lng);
                          }

                          // with array of pollygon points coordinates, send to controller with search criteria
                          var waterType = $('#typeOfWaterfront').val();
                          var priceSlider = $('#priceSlider').val();
                          var footageSlider = $('#footageSlider').val();
                          var beds = $("body").find("[aria-selected=true]").parent().attr("data-original-index");
                          var baths = $("body").find("[aria-selected=true]").parents().attr("data-original-index");
                          var residential = $('[name*="residential"]:checkbox:checked').length > 0;
                          var vacantland = $('[name*="vacantland"]:checkbox:checked').length > 0;
                          var commercial = $('[name*="commercial"]:checkbox:checked').length > 0;
                          var condos = $('[name*="condos"]:checkbox:checked').length > 0;
                          //$("body").find("[aria-selected=true]").parents().attr("data-original-index");

                          var polyPointsString = JSON.stringify(polyPoints);
                          var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
                          $.ajax({
                              url: '<?php echo URL::to("/searchByPoly/") ?>',
                              type: 'POST',

                              data: {_token: CSRF_TOKEN, polyPoints: polyPointsString,
                               waterFrontType: waterType,
                               price: priceSlider,
                               footage: footageSlider,
                               bed: beds,
                               bath: baths,
                               res: residential,
                               vacant: vacantland,
                               comm: commercial,
                               condo: condos },
                              success: function (data) {
                                jsonProps = JSON.parse(data);
                                $('#overMapLoadIcon').css('display', 'none');
                                removeAllMarkers();
                                markers=[];

                                for (var i = 0; i < jsonProps.length; i++) {
                                  //L_DisplayId
                                  placeMarkerFromPoly(jsonProps[i]);  
                                }

                              }
                          });

1 个答案:

答案 0 :(得分:0)

帕特里克斯,你是对的。我一直在测试它,似乎我的数字海洋dropplet无法处理那么多的回报。我基本上返回了大约12,000个属性的大部分,然后通过每个属性来查看它是否在多边形内。

我打算通过切换到多边形检查的javascript前端解决方案来修复它,但我发现大量的属性来自另一个我们永远不需要的县,所以我简单地减小了数据库的大小,现在它有效。

如果没有你的评论,我不会想出那个解决方案。谢谢patricus