URL::action 在 jquery ajax 中不起作用

Posted

技术标签:

【中文标题】URL::action 在 jquery ajax 中不起作用【英文标题】:URL::action not working in 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 在这种情况下如何在路由中添加控制器操作 【参考方案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

以上是关于URL::action 在 jquery ajax 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何将正确的 Url.Action 传递给 JQuery 方法而没有额外的 & 号麻烦?

如何在@Url.Action 中传递动态值?

如何在 jQuery $.ajax() 发布请求中向 MVC 控制器方法发送模型

mvc中的ajax jquery-方法返回不是布尔类型的True [重复]

jquery.validate 的ajax验证(转)

Jquery.Ajax的使用方法(自己已经实践过可行)