如何使用 API 中的 ajax post laravel 向控制器形成数据
How to post laravel form data to controller using ajax in API
我有一个在 Android 网络视图中打开的表单,我想将数据保存到数据库中,但是当我进行 ajax 调用并尝试打印数据时,显示一个空白数组,以下是我的代码:
<div class="card-body card-padding">
<form id="submitdataform">
@csrf
@foreach($formfields as $key=>$value)
<input type="hidden" name="campaign_id" value="{{$key}}"/>
@foreach($value as $attrkey)
<input type="hidden" name="attribute_id[]" value="{{$attrkey->id}}"/>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label class="pure-material-textfield-outlined w-100">
{{--<input placeholder=" " type="text" required>--}}
<?php
if ($attrkey->attribute_type == 'alpha') {
echo "<input placeholder=' ' type='text' name='attribute_value[]' required>";
} elseif ($attrkey->attribute_type == 'date') {
echo "<input placeholder=' ' type='date' name='attribute_value[]' required>";
} elseif ($attrkey->attribute_type == 'numberic') {
echo "<input placeholder=' ' type='number' name='attribute_value[]' required>";
}
?>
<span>{{$attrkey->attribute_name}}</span>
</label>
</div>
</div>
</div>
@endforeach
@endforeach
<button type="button" id="submitbtn">Submit</button>
</form>
</div>
现在ajax打电话给
$("#submitbtn").click(function (event) {
event.preventDefault();
var data = $("#submitdataform").serialize();
$.ajax({
type: "post",
url: "savecampaigndata",
data: {data: data},
contentType: 'application/x-www-form-urlencoded',
dataType: 'json',
success: function (data) {
// Android.passParams('dashboard');
},
error: function (data) {
// Android.passParams(url);
}
});
});
这是我想要获取所有数据的控制器方法,
public function SaveCampaignData(Request $request)
{
return response()->json($request->all());
$data = $request->all();
$attribute_id = [];
$attribute_value = [];
$campaign_id = $data['campaign_id'];
$user_id = Auth::user()->id;
foreach ($data as $key => $value) {
if ($key == "attribute_id") {
foreach ($value as $attrkey) {
$attribute_id[] = $attrkey;
}
} else {
if ($key == "attribute_value") {
foreach ($value as $attrvalue) {
$attribute_value[] = $attrvalue;
}
}
}
}
$mainArray = array_combine($attribute_id, $attribute_value);
$currentdate = Carbon::now();
foreach ($mainArray as $key => $value) {
DB::table('campaign_attribute_values')->insert(
[
'campaign_id' => $campaign_id,
'campaign_attribute_id' => $key,
'user_id' => $user_id,
'campaign_attribute_value' => $value,
'created_at' => $currentdate,
'updated_at' => $currentdate,
]
);
}
if ($this->CheckSmsLimit() > 0) {
$this->checkAutoReply($campaign_id, $user_id);
}
return redirect()->back()->with('success', 'Request Registered');
// return response()->json(['status' => true, 'message' => 'Record saved succesfully', 'code' => 200]);
}
这是邮递路线 URL :
https://subdomain.xyz.com/savecampaigndata
但是它在我的控制器中给出了一个空白数组作为输出。
尝试在 ajax 调用的 url 属性中添加“/”,并在 ajax 调用中也添加 header 属性。
$("#submitbtn").click(function (event) {
event.preventDefault();
var data = $("#submitdataform").serialize();
$.ajax({
type: "post",
url: "{{ url('savecampaigndata) }}",
data: {data: data},
success: function (data) {
// Android.passParams('dashboard');
},
error: function (data) {
// Android.passParams(url);
}
});
});
- 如果您不想发送 csrf 令牌
然后
app/Http/Middleware/VerifyCsrfToken.php
并将此路由的 url 添加到 except 数组
protected $except = [
'savecampaigndata'
];
- 如果需要
然后在头部添加
<meta name="csrf-token" content="{{ csrf_token() }}">
并在脚本中
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
您收到空白回复的原因似乎是 csrf
。我看到您已将它包含在您的表单中,但是,因为您使用的是 serialize
它不会像您期望的那样工作。
您可以通过几种不同的方式添加 csrf:
如果您的脚本在 blade 文件中,您只需将其添加到数据中即可 object:
data: {
data: data,
_token: "{{ csrf_token() }}",
},
或
根据 documentation,您可以在页面的 <head>
中添加以下内容:
<meta name="csrf-token" content="{{ csrf_token() }}">
然后在你加入 jQuery 之后包括以下内容:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
我有一个在 Android 网络视图中打开的表单,我想将数据保存到数据库中,但是当我进行 ajax 调用并尝试打印数据时,显示一个空白数组,以下是我的代码:
<div class="card-body card-padding">
<form id="submitdataform">
@csrf
@foreach($formfields as $key=>$value)
<input type="hidden" name="campaign_id" value="{{$key}}"/>
@foreach($value as $attrkey)
<input type="hidden" name="attribute_id[]" value="{{$attrkey->id}}"/>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label class="pure-material-textfield-outlined w-100">
{{--<input placeholder=" " type="text" required>--}}
<?php
if ($attrkey->attribute_type == 'alpha') {
echo "<input placeholder=' ' type='text' name='attribute_value[]' required>";
} elseif ($attrkey->attribute_type == 'date') {
echo "<input placeholder=' ' type='date' name='attribute_value[]' required>";
} elseif ($attrkey->attribute_type == 'numberic') {
echo "<input placeholder=' ' type='number' name='attribute_value[]' required>";
}
?>
<span>{{$attrkey->attribute_name}}</span>
</label>
</div>
</div>
</div>
@endforeach
@endforeach
<button type="button" id="submitbtn">Submit</button>
</form>
</div>
现在ajax打电话给
$("#submitbtn").click(function (event) {
event.preventDefault();
var data = $("#submitdataform").serialize();
$.ajax({
type: "post",
url: "savecampaigndata",
data: {data: data},
contentType: 'application/x-www-form-urlencoded',
dataType: 'json',
success: function (data) {
// Android.passParams('dashboard');
},
error: function (data) {
// Android.passParams(url);
}
});
});
这是我想要获取所有数据的控制器方法,
public function SaveCampaignData(Request $request)
{
return response()->json($request->all());
$data = $request->all();
$attribute_id = [];
$attribute_value = [];
$campaign_id = $data['campaign_id'];
$user_id = Auth::user()->id;
foreach ($data as $key => $value) {
if ($key == "attribute_id") {
foreach ($value as $attrkey) {
$attribute_id[] = $attrkey;
}
} else {
if ($key == "attribute_value") {
foreach ($value as $attrvalue) {
$attribute_value[] = $attrvalue;
}
}
}
}
$mainArray = array_combine($attribute_id, $attribute_value);
$currentdate = Carbon::now();
foreach ($mainArray as $key => $value) {
DB::table('campaign_attribute_values')->insert(
[
'campaign_id' => $campaign_id,
'campaign_attribute_id' => $key,
'user_id' => $user_id,
'campaign_attribute_value' => $value,
'created_at' => $currentdate,
'updated_at' => $currentdate,
]
);
}
if ($this->CheckSmsLimit() > 0) {
$this->checkAutoReply($campaign_id, $user_id);
}
return redirect()->back()->with('success', 'Request Registered');
// return response()->json(['status' => true, 'message' => 'Record saved succesfully', 'code' => 200]);
}
这是邮递路线 URL :
https://subdomain.xyz.com/savecampaigndata
但是它在我的控制器中给出了一个空白数组作为输出。
尝试在 ajax 调用的 url 属性中添加“/”,并在 ajax 调用中也添加 header 属性。
$("#submitbtn").click(function (event) {
event.preventDefault();
var data = $("#submitdataform").serialize();
$.ajax({
type: "post",
url: "{{ url('savecampaigndata) }}",
data: {data: data},
success: function (data) {
// Android.passParams('dashboard');
},
error: function (data) {
// Android.passParams(url);
}
});
});
- 如果您不想发送 csrf 令牌
然后
app/Http/Middleware/VerifyCsrfToken.php
并将此路由的 url 添加到 except 数组
protected $except = [
'savecampaigndata'
];
- 如果需要
然后在头部添加
<meta name="csrf-token" content="{{ csrf_token() }}">
并在脚本中
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
您收到空白回复的原因似乎是 csrf
。我看到您已将它包含在您的表单中,但是,因为您使用的是 serialize
它不会像您期望的那样工作。
您可以通过几种不同的方式添加 csrf:
如果您的脚本在 blade 文件中,您只需将其添加到数据中即可 object:
data: { data: data, _token: "{{ csrf_token() }}", },
或
根据 documentation,您可以在页面的
<head>
中添加以下内容:<meta name="csrf-token" content="{{ csrf_token() }}">
然后在你加入 jQuery 之后包括以下内容:
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });