[英]LAravel 5.4: Response from controller to blade by Ajax (laravel, json_encode() expects parameter 2 to be integer, object given)
我想將數據從控制器以數組的形式響應到AJAX,但它始終顯示此錯誤:
json_encode()期望參數2為整數,給定對象
以下是我的代碼:
function get_show(Request $request)
{
$id = $request->input('id');
$leads = Lead::find($id);
$leads_attendances = DB::table('event_attendances')
->leftJoin('leads', 'leads.id', '=', 'event_attendances.lead_id')
->leftJoin('groups', 'groups.id', '=', 'event_attendances.group_id')
->select('groups.name as event_name', 'leads.name as name', 'leads.company_name', 'event_attendances.attend as attend_status')
->where('event_attendances.lead_id', '=', $id)
->get()->toArray();
$output = array(
'id' => $id,
'country' => $leads->country,
'company_name' => $leads->company_name,
'lead_stage' => $leads->lead_stage
);
echo json_encode($output,$leads_attendances);
}
這是我的AJAX代碼:
$.ajax({
url: "{{route('main.get_show')}}",
method: 'get',
data: {id: id},
dataType: 'json',
success: function (response) {
console.log(response);
$('#model2').modal('show');
document.getElementById('leads').innerHTML += response.output.company_name;
document.getElementById('leads').innerHTML += response.leads_attendances;
新錯誤:
Leads:7515 Uncaught ReferenceError:未在i(jquery.min.js:2)在Object.fireWith的i。(jquery.min.js:2)的Object.success(Leads:7515)處定義了z_處的as.withWith(jquery.min.js:2)的Leads_attendances jquery.min.js:4),位於XMLHttpRequest。 (jquery.min.js:4)
預期的輸出響應:
{ “輸出”:{ “ID”: “25”, “國”: “”, “COMPANY_NAME”: “COMP1”, “lead_stage”: “下”}, “leads_attendances”:[{ “EVENT_NAME”:“事件1 “ ”名“: ”LEMUN“, ”COMPANY_NAME“: ”COMP1“, ”attend_status“: ”是“},{ ”EVENT_NAME“: ”事件2“, ”名“: ”ZDMJ“, ”COMPANY_NAME“:” COMP1 ”, “attend_status”: “是”},{ “EVENT_NAME”: “EVENT3”, “名”: “MNAL”, “COMPANY_NAME”: “COMP1”, “attend_status”: “是”},{ “EVENT_NAME”: “ event”,“ name”:“ Khalai”,“ company_name”:“ comp1”,“ attend_status”:“ Yes”},{“ event_name”:“ event4”,“ name”:“ Zamel”,“ company_name”: “COMP1”, “attend_status”: “是”}]}
在JS中建立表格:
success: function (response) {
console.log(response);
$('#myModaleee').modal('show');
var leads_attendances=response.leads_attendances;
document.getElementById('lead_details').innerHTML += '<table>';
for(var i=0;i<leads_attendances.length;i++){
var event_name=leads_attendances[i].event_name;
var name=leads_attendances[i].name;
var company_name= leads_attendances[i].company_name;
var attend_status= leads_attendances[i].attend_status;
document.getElementById('lead_details').innerHTML += '<tr>'+
'<td>'+event_name+'</td>'+
'<td>'+name+'</td>'+
'<td>'+company_name+'</td>'+
'<td>'+attend_status+'</td>'
+'</tr>';
}
document.getElementById('lead_details').innerHTML += '</table>';
}
第一個數組($ output)通過了並且可以與Ajax一起很好地工作,但是第二個數組顯示了該錯誤。 除了傳遞這些集合之外,我還需要傳遞更多的東西,如何傳遞它並使之與Ajax一起使用有幫助嗎?
謝謝
您不能使用類似echo json_encode($output,$leads_attendances);
嘗試這個
$data = ['output' => $output, 'leads_attendances' => $leads_attendances];
return response()->json(['results'=> $data]);
or
return response()->json($data);
在您的控制器中返回Json Response,如下所示:
返回response()-> json($ response,200);
function get_show(Request $request)
{
$id = $request->input('id');
$leads = Lead::find($id);
$leads_attendances = DB::table('event_attendances')
->leftJoin('leads', 'leads.id', '=', 'event_attendances.lead_id')
->leftJoin('groups', 'groups.id', '=', 'event_attendances.group_id')
->select('groups.name as event_name', 'leads.name as name', 'leads.company_name', 'event_attendances.attend as attend_status')
->where('event_attendances.lead_id', '=', $id)
->get()->toArray();
$output = array(
'id' => $id,
'country' => $leads->country,
'company_name' => $leads->company_name,
'lead_stage' => $leads->lead_stage
);
$response=array('output'=>$output,'leads_attendances'=>$leads_attendances);
return response()->json($response,200);
}
假設您有表div:
<table>
<thead>
<tr>
<th> event_name </th>
<th> name </th>
<th> company_name </th>
<th> attend_status </th>
</tr>
</thead>
<tbody id="tbody"></tbody>
</table>
你的ajax函數應該是:
$.ajax({
url:'/url here',
method:'GET',
dataType:'json',
success:function(response){
console.log(response);
var id = response.output.id;
var country= response.output.country;
var company_name=response.output.company_name;
var lead_stage =response.output.lead_stage;
var leads_attendances=response.leads_attendances;
var trHTML="";
for(var i=0;i<leads_attendances.length;i++){
var event_name=leads_attendances[i].event_name;
var name=leads_attendances[i].name;
var company_name= leads_attendances[i].company_name;
var attend_status= leads_attendances[i].attend_status;
let trRow="<tr>"+
"<td>"+event_name+"</td>"+
"<td>"+name+"</td>"+
"<td>"+company_name+"</td>"+
"<td>"+attend_status+"</td>"
+"</tr>";
trHTML=trHTML+trRow;
}
$('#tbody').empty();
$('#tbody').append(trHTML);
},
error:function(err){
console.log(err);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.