【问题标题】:URL::action not working in jquery ajaxURL::action 在 jquery ajax 中不起作用
【发布时间】:2016-08-12 22:56:50
【问题描述】:

我正在使用 laravel 4.2 并尝试使用 ajax 更新数据,但在 ajax 重定向 url 中对我不起作用。因为我使用 URL:action like,

$.ajax({
    type: 'POST',
    dataType: 'json',
    url : "store",
    data: { title: postTitle['post-title']['value'], body: postContent['post-body']['value'] },
    success: function(data) {
        if(data.success === false)
        {
            $('.error').append(data.message);
            $('.error').show();
        } else {
            $('.success').append(data.message);
            $('.success').show();
            setTimeout(function() {
                window.location.href = "{{ URL::action('PostsController@index') }}";
            }, 2000);
        }
    },
    error: function(xhr, textStatus, thrownError) {
        alert('Something went wrong. Please Try again later...');
    }
});

我不知道为什么它不起作用。请帮帮我。

【问题讨论】:

  • 注意:你需要一个到那个控制器动作的路由
  • @madalinivascu 在这种情况下如何在路由中添加控制器操作

标签: php jquery ajax laravel laravel-4


【解决方案1】:

你需要在你的路由文件中添加一个路由:

Route::post('post', 'PostsController@index');

但是如果你启用了 CSRF,那么你还需要发布 CSRF 代码。你可以通过在你的帖子“数据”中添加这个来做到这一点。

...
url : "{{ url('store') }}",
Data: data: { title: postTitle['post-title']['value'], body: postContent['post-body']['value'] }, _token: {{ csrf_token() }},
...

我希望这对你有用!

【讨论】:

    【解决方案2】:

    你在这里做什么是一种非常糟糕的做法。如果你有选择的话,你永远不应该在真正的应用程序中使用动态创建的 JS 代码。

    首先,您将 JS 和 PHP 代码紧密耦合(一种反 MVC)。请求时间增加。维护应用程序更难。您无法使用准备好的(缩小的)JS 等。

    Why generating JS with PHP is a bad practice

    在这里,您应该手动创建 URL:

    window.location.href = "/post/something";
    

    只需创建路由并在没有URL::的情况下使用它

    Route::post('post/something', 'PostsController@postSomething');
    

    【讨论】:

    • 如果他想更改该控制器操作的路由会发生什么,那么 url 会发生什么?,你为什么称其为可怕的做法
    • 他会去手动更改网址。更新后的帖子说明了为什么这是一种不好的做法。
    【解决方案3】:

    在你的路由文件中添加一个路由:

    Route::get('post','PostsController@index');
    

    把js改成:

     setTimeout(function() {
                    window.location = "<?php echo URL::action('PostsController@index') ?>";
                }, 2000);
    

    或:

       setTimeout(function() {
                        window.location = "<?php echo action('PostsController@index') ?>";
                    }, 2000);
    

    【讨论】:

    • 它不工作,它返回像http://localhost/editorlara4/public/posts/%7B%7B%20URL::action%28'PostsController@index'%29%20%7D%7D这样的url
    • 您是否在模板上启用了刀片?
    • 我不知道刀片是否启用。如何检查其是否启用
    • 你的视图文件应该有刀片在他的名字
    • 嗯,是的,我的视图文件扩展名为 .blade.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2023-04-05
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多