【问题标题】:Laravel 5 and AJAX responsesLaravel 5 和 AJAX 响应
【发布时间】:2016-07-13 12:52:00
【问题描述】:

我想坚定地使用 AJAX 和 Laravel 5。我通过 ajax 发送数据并发布到后端没有问题。但我在处理更新后的数据时遇到了问题。

一个例子:

用户可以在个人资料页面上更改他的用户名。更新的用户名通过 ajax 发送并发布到 UserController 处理请求的后端。将数据存储在数据库中后,应将新用户名发送到前端。 一种方法是使用return response()->json(['username' => $user->username]); 但是知道我必须使用显示旧用户名的 javascript 查找和更新每个 html 元素。这似乎有点广泛(例如在导航栏中,在页面标题等中)。

还有其他方法吗?例如仅重新加载视图的某些部分?

这是我的 ajax 函数:

<script>
    $(document).ready(function() {
        $('#submit-userdatas').click(function () {
            $.ajax({
                url: 'ajax/updateUserdata',
                type: 'post',
                data: {
                    '_token': $('input[name=_token]').val(),
                    'user_id': $('input[name=user_id]').val(),
                    'username': $('input[name=username]').val(),
                    'email': $('input[name=email]').val(),
                    'vorname': $('input[name=vorname]').val(),
                    'nachname': $('input[name=nachname]').val(),
                    'password': $('input[name=password]').val(),
                    'password_confirmation': $('input[name=password_confirmation]').val()
                },
                dataType: 'json',
                success: function (data) {
                    if (data.success) {
                        // find every element and replace the old username
                    } else {
                        // show some errors
                    }
                }
            });
        });
    });
</script>

我的带有更新方法的用户控制器:

public static function updateUser($userdata = []){
    try{
        $user = self::findOrFail($userdata['user_id']);
        foreach((array)$userdata as $key => $value){
            if(strlen($value) > 0){
                if($key == 'password'){
                    $user->$key = bcrypt($value);
                } else {
                    $user->$key = $value;
                }
            }
        }
        $user->save();
        return response()->json(['success' => true, 'username' => $user->username]);
    } catch(ModelNotFoundException $ex){
        return response()->json(['success' => false, 'error' => $ex->getMessage()]);
    }
}

谢谢!

【问题讨论】:

  • 您必须使用 javascript 在任何地方更新名称,除非您使用客户端模板引擎。
  • 也许您想了解更多关于 UI Data Binding 的信息——请跳到底部以获取可以为您处理此问题的 JavaScript 框架的链接。

标签: php jquery ajax laravel-5


【解决方案1】:

除了使用带有 2 路数据绑定(angular、vue.js 等)的前端框架或编写自己的框架之外,您还必须手动更新用户名。为了让您自己更轻松,您可以使用自定义属性将每个用户名包装在一个跨度中:

<div class="header">
    <div class="user_container">
          <span data-field="username">John Smith</span>
     </div>
</div>

<div class="body">
   Hello, <span data-field="username">John Smith</span>
</div>

当您收到来自 ajax 的响应时,只需更新自定义字段:

$(document).ready(function() {
    $('#submit-userdatas').click(function () {
        $.ajax({
            url: 'ajax/updateUserdata',
            type: 'post',
            data: data,                
            success: function (data) {
                if (data.success) {
                    $("[data-field='username']").text(data.username);
                } else {
                    // show some errors
                }
            }
        });
    });
});

【讨论】:

  • 谢谢!从来没有想过这个选项(并且不知道这个dat-field 属性。
  • 不客气,只是为了将来参考,您可以在 html5 规范中毫无问题地在 html 中使用任何自定义数据属性。无论如何,您始终可以在 html 中使用任何自定义属性而无需担心,但 html5 只是明确定义了data- 属性。 data-field 就是我所说的,但您可以随意称呼它。更多信息:developer.mozilla.org/en-US/docs/Web/Guide/HTML/…
猜你喜欢
  • 2015-05-31
  • 2023-03-22
  • 1970-01-01
  • 2016-04-18
  • 2015-09-24
  • 2016-06-11
  • 2015-05-17
  • 2016-01-24
  • 1970-01-01
相关资源
最近更新 更多