2016-10-11 2 views
0

У меня возникли трудности с передачей пользовательского объекта данных сборки контроллеру Laravel с помощью ajax. Это очень расстраивает, так как мне удалась использовать AJAX для создания довольно надежного веб-приложения. Однако это трудно.Laravel 5.2 Пользовательские данные не передаются

Я создаю опросы, в которых вопросы могут иметь более одного ответа (выберите все применимые), и поэтому вместо того, чтобы просто использовать функцию form.serialize(), я написал свой собственный, чтобы построить объект ответа, который я мог бы выполнять, и сохранять записи на стороне сервера. Функция ниже

function TraceHrForm(e) 
{ 
    e.preventDefault(); 
    var post_url=$(this).attr('url'); 
    var get_url=$(this).data('url'); 
    var tag=$(this).attr('tag'); 
    var checked = $("input[name*='sq']:checked"); 
    var addinfo=$("input[name='additional_info']"); 
    post_data=[]; 
    checked.each(function(){ 
    post_data.push({'sq_id': this.id, 'response': this.value}); 
    }); 
    addinfo.each(function(){ 
    if(this.value.length>0) 
    { 
     post_data.push({'sq_id':this.id,'additional_info':this.value}); 
    } 
    }); 
    pdata={survey_response: post_data}; 
    $.ajax({ 
    type: "post", 
    url: post_url, 
    data: pdata, 
    headers: {'Content-type': "application/json"} 
    }).done(function(response){ 
     console.log(response); 
    }); 
} 

Я могу видеть в инструментах Chrome Dev, что объект pdata построен правильно и файл routes.php посылает запрос к функции правого контроллера, но когда я исследую объект запроса в функции контроллера , данных нет.

public function submit(Request $request, TraceHrSurvey $thr) 
    { 
     return var_dump($request->all()); 

Я также попытался просто глядя на $request объекта, а также $request->input(survey_response)

Любые мысли были бы весьма признательны.

ответ

0

Спасибо Ахмеду, но меня интересовало только передача данных JSON на сервер. Мне удалось решить мою проблему, изменив свой код следующим образом.

function TraceHrForm(e) 
{ 
    e.preventDefault(); 
    var post_url=$(this).attr('url'); 
    var get_url=$(this).data('url'); 
    var tag=$(this).attr('tag'); 
    var checked = $("input[name*='sq']:checked"); 
    var addinfo=$("input[name='additional_info']"); 
    var post_data='{"survey_response": ['; <--Modified from array to object 
    checked.each(function(){ 
    post_data += '{"sq_id":"' + this.id + '", "response": "' + this.value + '"},'; 
    }); 
    addinfo.each(function(){ 
    if(this.value.length>0) 
    { 
     post_data += '{"sq_id":"' + this.id + '", "additional_info": "' + this.value + '"},'; 
    } 
    }); 
    var ind = post_data.length -1; 
    post_data = post_data.substring(0,ind); 
    post_data += ']}'; 
    $.ajax({ 
    type: "post", 
    url: post_url, 
    data: post_data 
    }).done(function(response){ 
    if(response=="1") 
    { 
     loadComponent(post_url,"#trace_hr"); 
    } 
    else { 
     alert('Trace Survey Did not save'); 
    } 
    }); 
} 

ИН моей функции контроллера Laravel я просто уравнял

public function submit(Request $request, $id) 
    { 
    $jdata=$request->json('survey_response'); 

и у меня был массив ассоциативных массивов, я мог бы перебор. Я не уверен, как это сработало, но я сделал это, я счастлив.

0

пытаются вернуть ответ JSON обратно на страницу как

$sentdata = $request->all(); 
return $response()->json([ 
    'result' => 'success', 
    'data' => $sentdata, 
]); 

, а затем и может cosole.log ур отправляемые данные внутри ур страницы, чтобы проверить процесс, используя точечную нотацию как

console.log(response.result); 
Смежные вопросы