Laravel:在JQUERY块中打印从Controller

时间:2015-07-29 18:17:00

标签: jquery json laravel

我正在动态填充相互依赖的选择列表国家,地区等

我填充国家/地区,我通过jquery将国家/地区的ID发送到控制器,这会将ID发送给模型,这会返回与该国家/地区ID对应的区域。所以现在我通过json将那些对,id和region发送到jquery代码作为对回调函数的响应。

我可以在firebug中看到它返回对应于id和region名称的正确json对,但是选择列表中填充了这两个单词

对象对象 obect对象 等等 这对实际上对应于id和name,id和name等。 这样做是因为我没有打印语法 - >对于正确的对象,但我不知道如何在JQUERY代码中编写它。我可以在刀片页面@foreach $ x中以$ y等方式进行,但不能在jq中进行。所以这基本上就是问题。当你从Controller获得json响应时,如何在JQUERY中打印对象数组?

这是JQUERY CODE>

$(document).ready(function () {

        $("#country").change(function (event) {
            alert("You have Selected  :: "+$(this).val());
         var country = $(this).val();
          $url = '{{URL::route('crud')}}';
          $.post($url, {input:country},function(data){            
                 $('#regions').empty();
                $.each(data, function(key, value){
                var option = $('<option/>', {'id':key, 'text':value});
                $('#regions').append(option);
                }); 

              });
          });
     });

这是从Jquery

获取id的控制器
public function getRegion()
    {

        $id = \Input::get('input');
        $regiones = Region::returnRegion($id);
        return \Response::json($regiones);
    }

这是模型

<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Session;
use DB;
class Region extends Model{



    public static function returnRegion($id)
    {
     $regiones = DB::table('regions')
       ->select('id', 'nombre')
       ->where('id_idioma', '=', '3')
       ->where('id_pais', '=', $id)
       ->distinct()
       ->get(); 

     return $regiones;   


    }

}

1 个答案:

答案 0 :(得分:0)

乍一看,您似乎并没有告诉jQuery您希望返回JSON。成功结束后(函数(数据){})你只需要添加, "JSON"即:

$.post($url, {input: country}, function (data) {
    $('#regions').empty();
    $.each(data, function (key, value) {
        var option = $('<option/>', {'id': key, 'text': value});
        $('#regions').append(option);
    });
}, "json"); //This bit

这将导致jQuery转换来自json的响应。

希望这有帮助!

编辑:

使用lists()而不是get()将返回一个键对值数组,其中使用get()将基本上嵌套在另一个数组中。所以,如果你要坚持使用get(),你需要将你的循环改为:

$.each(data, function (row) {
    var option = $('<option/>', {'id': row.id, 'text': row.nombre});
    $('#regions').append(option);
});