【问题标题】:Problems with Ajax-request via Laravel通过 Laravel 的 Ajax 请求问题
【发布时间】:2018-11-20 02:57:06
【问题描述】:

我对通过 Laravel 进行的 Ajax 请求有一个大问题。我不明白为什么它不是 Ajax。所有资源都在这里。

这是我的 Ajax 请求。

<script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <script>
        var nickname = "<?php echo $name_user; ?>";

        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });

        $('.subscribe').click(function() {
             jQuery.ajax({
                   type: 'post',
                   url: "{{ route('postSubscribe', '<?php echo $name_user; ?>') }}", //Путь к обработчик
                   data: {'user_name': nickname},
                   response: 'text',
                   success: function(data) {
                        console.log(data['result']);
                   },
                   error: alert('Error');
               })
        })
    </script>

这是我的网络路线。

Route::group(['middleware' => 'auth'], function() {
Route::get('/', 'AccountController@redirectToAccountPage');
Route::get('/account', 'AccountController@showAccount')->name('account');
Route::get('/account/settings', 'AccountController@showSettings')->name('settings');
Route::post('/account/settings', 'AccountController@sendSetting');
Route::get('/account/subscribe', 'AccountController@showSubscriberForm')->name('subscriber');
Route::post('/account/subscribe', 'AccountController@findUser')->name('postFindUser');
Route::get('/account/load_image', 'AccountController@showLoadImage')->name('load_image');
Route::post('/account/load_image', 'Photos\LoadPhotoController@loadPhoto');
Route::post('/account/logout', 'AccountController@logout')->name('logout');

Route::post('/user/{user_name}/', 'AccountController@subscribe')->name('postSubscribe');
Route::get('/admin', 'AccountController@showAdminPanel');

});

这是我的主要要求。

public function subscribe(Request $request, $name_user) {
    if($request->ajax()) {
        $query = 'SELECT id FROM subscriptions WHERE id_subscriber = ? AND id_subscribtion = ?';
        $queryFindAnother = 'SELECT id From new_users WHERE nickname = ?';
        $idAnotherUser = DB::select($queryFindAnother, [$name_user]);
        if(!DB::select($query, [Auth::user()->id, $idAnotherUser[0]->id])) {
            $query = 'INSERT INTO subscriptions (id_subscriber, id_subscribtion) VALUES (?, ?)';
            dd('Я здесь');
            //id_subscriber - тот, кто подписался.
            //id_subscribtion - на кого подписан.
            DB::insert($query, [Auth::user()->id, $idAnotherUser[0]->id]);
            return response()->json([
                'result' => '1', //всё прошло успешно, я подписан
            ]);
        }

        return back();
    }

    dd("It's not ajax");
    return back();
}

结果我收到了“这不是 Ajax”的消息。请帮帮我!

【问题讨论】:

  • 请添加与.subscribe类关联的HTML元素
  • url: "{{ route('postSubscribe', '&lt;?php echo $name_user; ?&gt;') }}", ...这看起来像是你把事情搞混了。试试{{ route('postSubscribe', $name_user) }}",吧。
  • @emtiaz-zahid,它已经存在。
    {!! csrf_field() !!}
    也许我的问题可能与空操作有关,但我有一条路线......
  • @peter,你解决我问题的方法行不通。再次尝试帮助我。谢谢你以前的方式。

标签: javascript php laravel logic


【解决方案1】:

我认为问题出在你的表格中

请更新您的表单

<form> 
{!! csrf_field() !!} 
<button class="subscribe" name="user" type="button">Подписаться.</button> 
</form>

在这里,你不需要任何动作或方法也不需要任何形式

因为您将表单数据作为 ajax 传递

并将按钮的类型添加为button,默认情况下它是提交类型,因此它可以正常提交表单。

【讨论】:

  • 我将按钮更改为 type = submit 的输入,但它不起作用。无论如何感谢您的解决方案。当我发送Ajax-request时,问题可能与X-CSRF-TOKEN有关。
【解决方案2】:

确保您已在顶部导入 Request 外观

【讨论】:

  • 我在页面顶部添加了“使用 Illuminate\Support\Facades”,其中有 Ajax 请求并且我有我的主要请求但它不起作用。无论如何感谢您的解决方案。
猜你喜欢
  • 2018-06-11
  • 2023-03-28
  • 2021-11-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 2020-05-17
  • 2019-03-06
  • 2011-05-01
相关资源
最近更新 更多