我很难使用ajax将自定义构建数据对象传递给Laravel控制器。这非常令人沮丧,因为到目前为止,我已经运用AJAX来构建一个相当强大的Web应用程序。然而,这个证明是困难的。
我正在建立调查,其中问题可以有多个答案(选择所有适用的答案),所以而不是仅使用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开发工具中看到对象pdata
是正确构建的,routes.php文件将请求发送到正确的控制器函数但是当我检查控制器函数中的请求对象时,没有数据存在。
public function submit(Request $request, TraceHrSurvey $thr)
{
return var_dump($request->all());
我还尝试过查看$request
对象以及$request->input(survey_response)
任何想法都会受到最高的赞赏。
答案 0 :(得分:0)
尝试将json响应返回到页面,如
$sentdata = $request->all();
return $response()->json([
'result' => 'success',
'data' => $sentdata,
]);
然后你可以使用cosole.log在ur页面内发送数据来检查进程,使用点符号
console.log(response.result);
答案 1 :(得分:0)
感谢Ahmed,但我只对将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');
我有一个可以迭代的关联数组。我不确定它是如何工作的,但确实如此,我很高兴。