【问题标题】:laravel ajax post issuelaravel ajax 发布问题
【发布时间】:2013-09-11 16:57:20
【问题描述】:

我整个周末都在处理这个问题,但无法让它工作。我可以使用 get 但不能使用 post 让它工作。我正在使用 Laravel 4 和 jquery。

我的 JS 看起来像这样:

$('.status').on('click', function(){
var $modal = $('#ajax-modal');
var id = $(this).attr("id");
setTimeout(function(){
 $modal.load('../status/'+id, '', function(){
 $modal.modal();
});
});
});

它可以很好地打开引导模式并加载状态页面。在那个页面上,我设置了一个带有用户 id 的按钮,当点击它时,我调用另一个 JS sn-p:

$modal.on('click', '.update', function(){
$modal
    .find('.modal-body')
    .html('<div class="progress progress-striped active"><div class="bar" style="width: 100%;">Processing ...</div></div>'); 
    var PostData = 'UserId='+$(this).attr("id");
    $.ajax({
        type: "POST",
        url: "",
        data:PostData,
        success: function(msg){
            $('.update').prop('disabled', true);
            setTimeout(function(){
            $modal
            .find('.modal-body')
            .html('<div class="alert-show-success"><img src="../../../public/assets/img/icons/accept.png" />This user was successfully de-activated!</div>');}, 1500);    
        },
        error: function(){
        //alert("failure");
        setTimeout(function(){
        $modal
        .find('.modal-body')
        .html('<div class="alert-show-failed"><img src="../../../public/assets/img/icons/failed.fw.png" />There was an error processing this request!</div>');}, 1500);
        }
        }); 

});

模态加载正常,它发现状态页面正常,但控制器中实际上没有发生任何事情:(我在那里硬编码了 2 来测试它。

public function postStatus()
{
    DB::table('users')
    ->where('id', 2)
    ->update(array('activated' => 0));
}

不知道我错过了什么。非常感谢任何帮助。

【问题讨论】:

    标签: javascript jquery ajax laravel


    【解决方案1】:

    我建议进行@Arda 建议的更改,但我相信您的 jquery 不正确。您将键设置为唯一,值设置为 data

    试试这个:

    $("a.delete").click(function () {
        var id = $(this).attr("id");
        $.ajax({
          type: 'post',
          url: "{{URL::route('user_status')}}", 
          data: {'id' : id}
        });
    

    这需要使用刀片模板,但无论如何这是一个很好的做法。

    【讨论】:

    • 我不敢相信我错过了那个数据值。我看了一遍又一遍,没看懂。
    • 你能让它工作吗?有时,查看代码时间过长只会将错误隐藏在显而易见的范围内!
    【解决方案2】:

    试试这样:

    首先,让以 URL 命名的路由更具动态性:

    Route::post('users/status', array('as'='user_status', 'uses'=>'Controllers\UsersController@postStatus');
    

    然后,更改您的帖子 jQuery(我认为这是错误的来源)

    $("a.delete").click(function () {
        var $id = $(this).attr("id");
    
        $.post('{{URL::route('user_status')}}',
            {
                id: $id
            }
        );
    
    });
    

    还有你的控制器方法:

    public function postStatus()
    {
        if(Request::ajax()) {
            $thisID = Input::get('id');
            DB::table('users')
                    ->where('id', $thisID)
                    ->update(array('activated' => 0));
        }
    }
    

    没试过,但应该可以。

    【讨论】:

    • 我会更新我的代码,看看是否可行。我实际上是在使用外部的 JS 文件,所以我无法使路由回显 php,除非我将它移动到视图中。
    • @Scott 然后尝试更改为相对 url。没关系。还将 id 变量更改为 $id 并更改 json 以获取该更改以防止混淆
    • 我无法完成这项工作。我正在使用 Laravel 4,以防万一。我在想也许我需要附加令牌才能作为帖子工作。
    • @Scott 你在路由前运行 csrf 过滤器吗?如果是这样,请尝试先将其删除。否则,没关系。
    • 不,我没有运行过滤器。我也尝试过传入 _token,但这似乎并不重要。
    猜你喜欢
    • 2013-01-10
    • 2015-11-11
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 2015-04-06
    • 2014-06-08
    相关资源
    最近更新 更多