如何在 Laravel 中使用 ajax 请求插入 sessionStorage 数据?
How to insert sessionStorage data using ajax request in Laravel?
我对这个使用 laravel 的 ajax 请求很陌生,目前我被卡住了。我在从数据库插入 sessionStorage 时遇到问题。
例如,我的会话存储中有:
Key Value
=================
gclid 12345
token abcde
我想使用 ajax 获取 gclid
或 token
值并将其存储在数据库中。
在我的 ajax 中,我遇到了如何获取这些参数值并将其存储在我的 db
中的问题。我有这样的条件来获取参数的 key
这样的逻辑:
这是在我的控制器中:
if(key == gclid)
$traffic->traffic_type = $request->('gclid');
else if (key == token)
$traffic->traffic_type = $request->('token');
如何在我的 jquery 中传递此变量并在我的控制器中添加一个请求以使用 ajax 获取它?
var gclid = sessionStorage.getItem('gclid');
var token = sessionStorage.getItem('token');
Ajax
// Tracking Parameters
function storeVisitorParameters() {
let url = '{{ route('trackvisit') }}';
var gclid = sessionStorage.getItem('gclid');
var token = sessionStorage.getItem('token');
const data = {};
$.ajax({
type: 'POST',
url: url,
data:data,
beforeSend: function (xhr) {
var token = $('meta[name="csrf-token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
},
complete: function() {
},
success: function (data) {
$.notify("Visitor Parameters Stored!", 'success');
},
error: function (xhr, ajaxOptions, thrownError) {
console.log('server errors', thrownError);
}
});
}
TrafficController.php
class TrafficController extends Controller
{
// Store gclid or token parameters to traffic_tacking_table
public function storeVisitorParameters(Request $request)
{
$traffic = new TrafficTracking();
$traffic->user_id = $user->user_id;
if($traffic->traffic_type = $request->gclid;) // check if key = gclid
{
$traffic->traffic_type = $request->gclid; // store the key in db
$traffic->traffic_value = $request->get('gclid');
}
else if ($traffic->traffic_type = $request->token) // check if key = token
{
$traffic->traffic_type = $request->token; // store the key in db
$traffic->traffic_value = $request->get('token');
}
$traffic->ip_address = $request->ip();
$traffic->domain = $request->getHttpHost();
$traffic->save();
return response()->json($traffic);
}
}
web.php
Route::post('/trackvisit', 'TrafficController@storeVisitorParameters')->name('trackvisit');
迁移
public function up()
{
Schema::create('traffic_tracking', function (Blueprint $table) {
$table->increments('traffic_id');
$table->string('ip_address');
$table->string('traffic_type');
$table->string('traffic_value');
$table->integer('user_id');
$table->timestamps();
});
}
我的主要目标是仅获取 sessionStorage
值并向我的控制器发送请求。
在您的 php 控制器中,将此 if($traffic->traffic_type = $request->gclid;)
更改为 if($traffic->traffic_type == $request->gclid)
,您是在比较值吗??它应该是双 ==
并在 if condition
中删除 ;
在 javascript 中捕获 csrf 令牌,
var _token = $('meta[name="csrf-token"]').attr('content');
在AJAX请求中,
dataType: 'JSON', // Add datatype as JSON, optional still for good practice
data:{
_token: _token,
gclid: gclid,
token: token
},
内部数据 {} 您将值(gclid、_token 和您的 sessionStorage 令牌)作为 JSON 格式的数据传递给 laravel 控制器
我对这个使用 laravel 的 ajax 请求很陌生,目前我被卡住了。我在从数据库插入 sessionStorage 时遇到问题。
例如,我的会话存储中有:
Key Value
=================
gclid 12345
token abcde
我想使用 ajax 获取 gclid
或 token
值并将其存储在数据库中。
在我的 ajax 中,我遇到了如何获取这些参数值并将其存储在我的 db
中的问题。我有这样的条件来获取参数的 key
这样的逻辑:
这是在我的控制器中:
if(key == gclid)
$traffic->traffic_type = $request->('gclid');
else if (key == token)
$traffic->traffic_type = $request->('token');
如何在我的 jquery 中传递此变量并在我的控制器中添加一个请求以使用 ajax 获取它?
var gclid = sessionStorage.getItem('gclid');
var token = sessionStorage.getItem('token');
Ajax
// Tracking Parameters
function storeVisitorParameters() {
let url = '{{ route('trackvisit') }}';
var gclid = sessionStorage.getItem('gclid');
var token = sessionStorage.getItem('token');
const data = {};
$.ajax({
type: 'POST',
url: url,
data:data,
beforeSend: function (xhr) {
var token = $('meta[name="csrf-token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
},
complete: function() {
},
success: function (data) {
$.notify("Visitor Parameters Stored!", 'success');
},
error: function (xhr, ajaxOptions, thrownError) {
console.log('server errors', thrownError);
}
});
}
TrafficController.php
class TrafficController extends Controller
{
// Store gclid or token parameters to traffic_tacking_table
public function storeVisitorParameters(Request $request)
{
$traffic = new TrafficTracking();
$traffic->user_id = $user->user_id;
if($traffic->traffic_type = $request->gclid;) // check if key = gclid
{
$traffic->traffic_type = $request->gclid; // store the key in db
$traffic->traffic_value = $request->get('gclid');
}
else if ($traffic->traffic_type = $request->token) // check if key = token
{
$traffic->traffic_type = $request->token; // store the key in db
$traffic->traffic_value = $request->get('token');
}
$traffic->ip_address = $request->ip();
$traffic->domain = $request->getHttpHost();
$traffic->save();
return response()->json($traffic);
}
}
web.php
Route::post('/trackvisit', 'TrafficController@storeVisitorParameters')->name('trackvisit');
迁移
public function up()
{
Schema::create('traffic_tracking', function (Blueprint $table) {
$table->increments('traffic_id');
$table->string('ip_address');
$table->string('traffic_type');
$table->string('traffic_value');
$table->integer('user_id');
$table->timestamps();
});
}
我的主要目标是仅获取 sessionStorage
值并向我的控制器发送请求。
在您的 php 控制器中,将此 if($traffic->traffic_type = $request->gclid;)
更改为 if($traffic->traffic_type == $request->gclid)
,您是在比较值吗??它应该是双 ==
并在 if condition
;
在 javascript 中捕获 csrf 令牌,
var _token = $('meta[name="csrf-token"]').attr('content');
在AJAX请求中,
dataType: 'JSON', // Add datatype as JSON, optional still for good practice
data:{
_token: _token,
gclid: gclid,
token: token
},
内部数据 {} 您将值(gclid、_token 和您的 sessionStorage 令牌)作为 JSON 格式的数据传递给 laravel 控制器