![](/img/trans.png)
[英]Laravel chained/linked select box failed to load resource status 500 internal server error
[英]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。 我不確定自己做錯了什么,對於新手來說,在一些復雜的任務中會有所幫助,將不勝感激。
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')));
}
{{ 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} [] []
修改后的代碼仍然存在相同的錯誤。
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>
我不確定laravel如何工作,但是在create
方法中顯然$client_id
是未定義的。 嘗試將其作為參數傳遞。
關於javascript: 'itempus.dev/task/create' + clients.val()
將產生類似itempus.dev/task/create1
(假設select中的值為數字)。 創建后,您會錯過斜線。 也許這就是為什么您無法進行路由工作的原因。
干杯
在您的代碼中(閱讀有關$project
和Response::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.