簡體   English   中英

Laravel Chained Select加載資源失敗:服務器響應狀態為500

[英]Laravel Chained Select Failed to load resource: the server responded with a status of 500

完成編輯

在完善代碼后,我已經編輯了原始問題,使我可以更好地定義更好的錯誤

嗨,我正在創建一個鏈接選擇框,一旦選擇了一個客戶端,它就會找到客戶端項目。

ajax正在執行其工作,它知道已選擇了哪個客戶端,並且我的控制台告訴我以下內容:

Failed to load resource: the server responded with a status of 500 (Internal Server Error) http://itempus.dev/task/clientsprojects?option=5

上面的選項值引用了我要傳遞到項目數據庫並查找客戶項目的客戶ID。 我不確定自己做錯了什么,對於新手來說,在一些復雜的任務中會有所幫助,將不勝感激。

TaskController

public function create()
    {
        $tasks = Auth::user()->tasks;   
        $client_options = DB::table('clients')->orderBy('client_name', 'asc')->lists('client_name','id');
        $team_options = DB::table('teams')->orderBy('team_member_name', 'asc')->lists('team_member_name','id', 'team_member_category');
        return View::make('tasks.create', array('project_options' => $project_options, 'team_options' => $team_options, 'client_options' => $client_options));
}       

public function clientsprojects() {

        $input = Input::get('option');
        $client_id = Project::find($input);
        $projects = DB::table('projects')->where('client_id', $client_id->id)
                                           ->orderBy('project_name')
                                           ->lists('id','project_name');
        $models = $project->projects();
        return Response::eloquent($models->get(array('id','project_name')));    
        }

意見/任務/ create.blade.php

{{ Form::open(array('action' => 'TaskController@store', 'id' => 'createuser')) }}
    <div class="form-group">
        @if(count($client_options)>0)

           {{ Form::label('select_client', 'Assign to Client', array('class' => 'awesome client_option'));  }}
        {{ Form::select('client', $client_options , Input::old('client'), array('class' => 'tempus_select client_option', 'id' => 'select_client')) }}

        @endif 
    </div>

    <div class="form-group deletegates">

            {{ Form::label('select_client', 'Assign to Project', array('class' => 'awesome'));  }}
        {{ Form::select('project', array_merge(array('default' => 'Please Select')), 'default', array('class' => 'tempus_select', 'id' => 'project_select')) }}

</div>
    {{ Form::submit('Create the task!', array('class' => 'btn btn-primary')) }}

{{ Form::close() }}
<script>
    $(document).ready(function($){
        $('#select_client').change(function(){
        $.get("{{ url('task/clientsprojects')}}", 
        { option: $(this).val() }, 
        function(data) {
            var model = $('#project_select');
            model.empty();

            $.each(data, function(index, element) {
                model.append("<option value='"+ element.id +"'>" + element.name + "</option>");
            });
        });
        });
    });
</script>

Route.php

我也將路線定義為:

Route::get('task/clientsprojects', function(){
    $input = Input::get('option');
    $client_id = Project::find($input);
    $projects = DB::table('projects')->where('client_id', $client_id->id)
                               ->orderBy('project_name')
                               ->lists('id','project_name');
    $models = $project->projects();
    return Response::eloquent($models->get(array('id','project_name')));
});

更新

jquery console errorGET http://itempus.dev/task/clientsprojects?option=7 500 (Internal Server Error) jquery.js:8475
send jquery.js:8475
st.extend.ajax jquery.js:7930
st.(anonymous function) jquery.js:7569
(anonymous function) create:210
st.event.dispatch jquery.js:3045
y.handle jquery.js:2721

應用程序/存儲/記錄

[2014-03-12 17:01:00] log.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php:1429
Stack trace:
#0 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php(1050): Illuminate\Routing\Router->handleRoutingException(Object(Symfony\Component\Routing\Exception\ResourceNotFoundException))
#1 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php(1014): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#2 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(574): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#3 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(550): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#4 C:\xampp\htdocs\iTempus\public\index.php(49): Illuminate\Foundation\Application->run()
#5 {main} [] []
[2014-03-12 17:01:00] log.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php:1429
Stack trace:
#0 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php(1050): Illuminate\Routing\Router->handleRoutingException(Object(Symfony\Component\Routing\Exception\ResourceNotFoundException))
#1 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php(1014): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#2 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(574): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#3 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(550): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#4 C:\xampp\htdocs\iTempus\public\index.php(49): Illuminate\Foundation\Application->run()
#5 {main} [] []

更新2

修改后的代碼仍然存在相同的錯誤。

TaskController.php

public function create()
        {
            $tasks = Auth::user()->tasks;   

        $client_options = DB::table('clients')->orderBy('client_name', 'asc')->lists('client_name','id');


    $project_options = DB::table('projects')->orderBy('project_name', 'asc')->lists('project_name','id');

    $team_options = DB::table('teams')->orderBy('team_member_name', 'asc')->lists('team_member_name','id', 'team_member_category');

    return View::make('tasks.create', array('project_options' => $project_options, 'team_options' => $team_options, 'client_options' => $client_options));
}   

routes.php文件

Route::get('task/clientsprojects', function(){
    $input = Input::get('option');
    $client = Client::find($input);
    $projects = DB::table('projects')->where('client_id', $client->id)
                           ->orderBy('project_name')
                           ->lists('id','project_name');
    $response = array(array());
    $i = 0;
    foreach($projects as $project){
    $response[$i]['id'] = $project->id;
    $response[$i]['name'] = $project->name;
    $i++; 
    }

    return json_encode($response);
});

create.blade.php

{{ Form::open(array('action' => 'TaskController@store', 'id' => 'createuser')) }}
    <div class="form-group">
        @if(count($client_options)>0)

            {{ Form::label('select_client', 'Assign to Client', array('class' => 'awesome client_option')); }}
    {{ Form::select('client', $client_options , Input::old('client'), array('class' => 'tempus_select client_option', 'id' => 'select_client')) }}

        @endif 
</div>
<div class="form-group deletegates">

            {{ Form::label('project_select', 'Assign to Project', array('class' => 'awesome')); }}
    {{ Form::select('project', array_merge(array('default' => 'Please Select')), 'default', array('class' => 'tempus_select', 'id' => 'project_select')) }}
</div>

    {{ Form::submit('Create the task!', array('class' => 'btn btn-primary')) }}

    {{ Form::close() }}
<script>
    $(document).ready(function($){
        $('#select_client').change(function(){
        $.get("{{ url('task/clientsprojects')}}",{ 
            option: $(this).val()
            }, function(data) {
                var model = $('#project_select');
                model.empty();
                $.each(data, function() {
                    model.append('' + data.name + '');
                });
            }, 'json');
        });
        });
</script>

更新3 ##

在此處輸入圖片說明

我不確定laravel如何工作,但是在create方法中顯然$client_id是未定義的。 嘗試將其作為參數傳遞。

關於javascript: 'itempus.dev/task/create' + clients.val()將產生類似itempus.dev/task/create1 (假設select中的值為數字)。 創建后,您會錯過斜線。 也許這就是為什么您無法進行路由工作的原因。

干杯

在您的代碼中(閱讀有關$projectResponse::eloquent()的注釋):

Route::get('task/clientsprojects', function(){
    $input = Input::get('option');
    $client_id = Project::find($input);
    $projects = DB::table('projects')->where('client_id', $client_id->id)
                           ->orderBy('project_name')
                           ->lists('id','project_name');
    // You don't have $project variable in the scope, instead it $projects
    $models = $project->projects(); // <------
    // I don't know about any method available as eloquent();
    return Response::eloquent($models->get(array('id','project_name'))); // <----
});

這可能無法解決問題,但會提供更多信息, $project->projects()的作用以及您要嘗試的操作。

如果您的日志中仍然存在這些錯誤:

[2014-03-12 17:01:00] log.ERROR:C:\\ xampp \\ htdocs \\ iTempus \\ vendor \\ laravel \\ framework \\ src \\ Illuminate \\ Routing \\中的異常'Symfony \\ Component \\ HttpKernel \\ Exception \\ NotFoundHttpException' Router.php:1429

這是Laravel說的“我無法通過這些特征找到一條路”

可能您的問題更簡單:您的JavaScript無法打開該路由,因為URL格式可能不正確。

$.get("{{ url('task/clientsprojects')}}", ...

1)打開您的HTML

2) 從上面的行中獲取生成的URL可能類似於:

http://itempus.dev/task/clientsprojects?option=7

要不就

http://itempus.dev/task/clientsprojects

3)在Chrome上,按F12鍵以打開開發工具

4)使用此URL構建如下命令,並粘貼開發工具命令行(然后按Enter):

$.get('http://itempus.dev/task/clientsprojects');

5)檢查錯誤,然后嘗試

$.get('http://itempus.dev/');

您應該獲得一些數據,有時很多,但是沒有錯誤。 數據甚至無法在javascript中處理,但此時您不應出現錯誤。

6)獲取相同的URL,然后嘗試將其粘貼到瀏覽器地址欄中,並檢查是否沒有錯誤

如果沒有錯誤,則您的路由是正確的,否則您將不得不再次檢查您的routes.php文件,這是不允許javascript(甚至您通過瀏覽器URL進入)的問題。

另一種可能性是控制器內部發生異常,但是通過手動點擊該路由,您也應該能夠看到它。 但是,再次,如果仍然存在那些NotFoundHttpException錯誤,可能是路由問題。

為了確保這些錯誤是相關的。 執行:

php artisan tail

並檢查錯誤是否在JavaScript完全符合該路線的同時發生。

編輯1

從注釋中Trying to get property of non-object是您的真正錯誤。 您可能正在從表中選擇一些記錄,並且其中至少有一個未作為對象返回,可能為null。

編輯2

“嘗試獲取非對象的屬性”表示您正在嘗試將不是對象的變量作為對象進行訪問。 該行是導致錯誤的原因:

 $response[$i]['id'] = $project->id;

將查詢更改為

$projects = Project::where('client_id', $client->id)
                   ->orderBy('project_name')
                   ->get(array('id','project_name'));

應該有助於使其工作。

編輯3

包起來:

這應該作為您的路線:

Route::get('task/clientsprojects', function(){
    $input = Input::get('option');

    $client = Client::find($input);

    $projects = DB::table('projects')->where('client_id', $client->id)
                           ->orderBy('project_name')
                           ->lists('id','project_name');

    $response = array();

    foreach($projects as $project){
        $response[$project->id] = $project->name;
    }

    return Response::json($response);
});

而這個JavaScript:

<script>
    $(document).ready(function($){ 
        $('#select_client').change(function(){ 
            $.get("{{ url('task/clientsprojects') }}", { option: $(this).val() }, function(data) { 
                $.each(data, function(key, value) { 
                     $('#project_select').append("<option value='"+key+"'>"+value+"</option>'"); 
                });
            }); 
        });
    });
</script>

好的,讓我們嘗試解決目前為止的問題。

您的新路線

Route::get('task/clientsprojects', function(){
    $input = Input::get('option');
    $client = Client::find($input);
    $projects = DB::table('projects')->where('client_id', $client->id)
                               ->orderBy('project_name')
                               ->lists('id','project_name');
    $response = array(array());
    $i = 0;
    foreach($projects as $project){
        $response[$i]['id'] = $project->id;
        $response[$i]['name'] = $project->name;
        $i++; 
    }

    return json_encode($response);
});

還有你的劇本

$(document).ready(function($){
        $('#select_client').change(function(){
            $.get("{{ URL::to('/task/clientsprojects')}}",{ 
                option: $(this).val()
                }, function(data) {
                    var model = $('#project_select');
                    model.empty();
                    $.each(data, function() {
                        model.append('' + data.name + '');
                    });
                }, 'json');
        });
    });

復制粘貼並告訴我它的工作原理以及出現的錯誤

最后一件事:修復#project_select的標簽

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM