#php #jquery #ajax #laravel #laravel-request
#php #jquery #ajax #laravel #laravel-запрос
Вопрос:
Я очень новичок в этом ajax-запросе с использованием laravel, и в настоящее время я застрял. У меня возникли проблемы с вставкой sessionStorage из базы данных.
Например, у меня есть здесь, в моем sessionStorage:
Key Value
=================
gclid 12345
token abcde
Я хочу получить значение для gclid
или token
значений с помощью ajax и сохранить его в базе данных.
Здесь, в моем 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
значения и отправить запрос моему контроллеру.
Ответ №1:
В вашем контроллере php измените это if($traffic->traffic_type = $request->gclid;)
на if($traffic->traffic_type == $request->gclid)
, вы правильно сравниваете значения?? Он должен быть двойным ==
и удалять ;
внутри условия if
В 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
},
Внутри data {} вы передаете значения (gclid, _token и ваш токен sessionStorage) в формате JSON в контроллер laravel
Комментарии:
1. Итак, когда я делаю запрос через контроллер для этого в ajax
gclid: gclid
, это должно быть$request->gclid
правильно?2. да, точно, левая сторона — ваш ключ, а правая сторона — значение, вместе одна пара … его формат JSON