如何将变量从另一个函数传递到索引函数中的视图

Posted

技术标签:

【中文标题】如何将变量从另一个函数传递到索引函数中的视图【英文标题】:How to pass a variable from another function to the view in index function 【发布时间】:2017-10-23 22:08:45 【问题描述】:

我想将findCity() 函数中的$data 变量与json 返回到索引函数中的视图。

请问我该怎么做?

class HomeController extends Controller
  
    public function index(Request $request)
    
        $countries = Location::select('country_name')
            ->groupBy('country_name', 'country_name')
            ->get();

        $cities = Location::select('city_name','city_name')
            ->where('region_name', $request->region_name)
            ->groupBy('city_name', 'city_name')
            ->get();

        $areas = Area::get()->toTree();

        return view('home', compact('areas','countries', 'cities'));
    

    public function findCity(Request $request)
    
        $data = Location::select('city_name','city_name')
            ->where('region_name', $request->region_name)
            ->groupBy('city_name', 'city_name')
            ->get();

        return response()->json($data);
    

Ajax 代码:

$(document).on('change','.regionName',function()

    //console.log("hmm its change");

    var cat_id=$(this).val();

    //console.log(cat_id);

    var div=$(this).parent();

    var op=" ";

    $.ajax(
        type:'get',
        url:'!!URL::to('findCityName')!!',
        data:'region_name':cat_id,
        success:function(data)

            //console.log('success');

            //console.log(data);

            //console.log(data.length);

            op+='<option value="0" selected disabled>Choose City</option>';
            for(var i=0;i<data.length;i++)

            op+='<option value=" route('user.location.store', $cities) ">'+data[i].city_name+'</option>';

           


        div.find('.cityName').html(" ");

        div.find('.cityName').append(op);


        ,
        error:function()

        
    );
);
);

【问题讨论】:

【参考方案1】:

您可以将findCity() 设为静态方法并从index() 方法内部调用它:

public function index(Request $request)

    // The rest of your code here...

    // Calling the static method
    $city = self::findCity($request);

    return view('home', compact('areas', 'countries', 'cities', 'city'));


public static function findCity(Request $request)

    $data = Location::select('city_name', 'city_name')
        ->where('region_name', $request->region_name)
        ->groupBy('city_name', 'city_name')->get();

    return $data;

阅读更多关于static methods in the php documentation的信息。

【讨论】:

我试过了,但是 url 中的 ajax 函数得到了响应,但带有标题:HTTP/1.0 200 OK Cache-Control: no-cache Date @Camilo 为您的问题添加更多信息。你没有提到没有 AJAX 调用。使用 AJAX 调用哪个控制器方法?参数是什么? 代码太长了,我不知道怎么放在这里,但是我在数据库中有一个县、地区和城市表,我做了一个下拉菜单,从服务器获取城市和地区名称并使用您选择的城市更新 URL,这就是我的 Ajax 响应 不需要添加所有代码,只需添加相关部分即可重现您的问题。没有它,我将无法为您提供更多帮助。 我认为这应该在另一个帖子中【参考方案2】:

您需要使用函数调用、传递和返回。像这个。我认为它可以帮助你。

class HomeController extends Controller
  
    public function index(Request $request)
    
        $countries = Location::select('country_name')
            ->groupBy('country_name', 'country_name')
            ->get();

        $cities = $this->findCity($request)

        $areas = Area::get()->toTree();

        return view('home', compact('areas','countries', 'cities'));
    

    public function findCity($request)
    
        $data = Location::select('city_name','city_name')
            ->where('region_name', $request->region_name)
            ->groupBy('city_name', 'city_name')
            ->get();

        return response()->json($data);
    

【讨论】:

我试过了,但是 url 中的 ajax 函数响应但带有标题:HTTP/1.0 200 OK Cache-Control: no-cache Date

以上是关于如何将变量从另一个函数传递到索引函数中的视图的主要内容,如果未能解决你的问题,请参考以下文章

Django - 将变量从函数视图传递到 html 模板

将从 HTTP 请求数据声明的数据/变量传递到另一个视图控制器

如何将 python 函数从另一个文件导入 django 视图

将数据从控制器传递到 Laravel 中的视图

如何将 NSthread 函数从一个视图传递到另一个视图

如何将值从 javascript 函数传递到 django 视图