【问题标题】:Laravel Mews captcha_img() does not return on refreshLaravel Mews captcha_img() 不会在刷新时返回
【发布时间】:2021-03-12 05:13:03
【问题描述】:

我正在使用带有 Laravel 5.5 的 Mews/Captcha 包。申请。

我正在实现一个联系表单,用户在其中填写、输入验证码数据并提交。所有这些都有效。如果您转到表单,则会出现验证码图像。如果您刷新页面,则会出现一个新的验证码图像。如果您尝试在没有验证码或验证码不正确的情况下提交表单,则会失败。如果您使用正确的验证码提交,则成功。

我遇到的问题是刷新按钮,以防用户想要更改图像。对于我的生活,我无法让它返回图像,即使我已经看到许多声称使用类似代码的示例。发生的情况是当前验证码图像被空格替换。

这是按钮的代码:

<script>
    $(document).ready(function(){
        $('#reload').on('click', function(){
            $.ajax({
                type: 'GET',
                url: '/reload-captcha',
                success: function(data) {
                    $("#captchadiv").html(data.captcha);
                }
            });
        });
    });
</script>

下面是验证码图片和按钮所在页面下方的代码:

        <tr>
            <td><button type="button" class="button reload" id="reload">Refresh</button></td>
            <td><div id="captchadiv">{!! captcha_img('flat') !!}</div></td>
        </tr>
        <tr>
            <td><label for="captcha">Captcha</label></td>
            <td><input type="text" id="captcha" class="form-control" placeholder="Enter Captcha" name="captcha">
                @if ($errors->has('captcha'))
                    <span class="textRed">
                        <strong>{{ $errors->first('captcha') }}</strong>
                    </span>
                @endif</td>
        </tr>

这是响应的代码:

    public function reloadCaptcha()
    {
        return response()->json(['captcha'=> captcha_img('flat')]);
    }

现在,如果我用一些文本替换 captcha_img('flat') 并单击按钮,它会按预期运行并用文本替换之前的图像。此外,如果提供的文本是从公共目录中的路径调用静态图像的 html 代码,它也可以工作。

所以两件事情中的一件正在发生:

  1. captcha_img() 函数在响应步骤中失败。所以没有任何回报。
  2. 表单中的 javascript 无法从返回的 json 对象中提取图像。

我猜问题是#1。不知何故,控制器无法调用 captcha_img() 函数,而主 php/html 可以。我不知道为什么会这样。

请注意,在我的实验中,我输入了一个显示数据和状态的警报,数据显示一个“对象”,状态为“成功”。

更新

我放弃了。无论出于何种原因,我只是无法让它工作,我现在不能再花时间在它上面了。我最终决定让按钮重新加载整个页面,而不是尝试生成一个新的验证码图像以插入到 html 中。

【问题讨论】:

  • 我检查了您的链接并将其更改为 flat、mini、default、math 和 inverse 类型的验证码,它工作正常。
  • 你的 /reload-captcha 返回:{ "captcha": "" }
  • 我正在尝试各种方法来尝试确定重新加载不起作用的原因。这就是为什么有 earth2.png 参考来看看我是否可以用静态图像换掉验证码图像。当我在玩代码时,你碰巧检查了它。

标签: javascript php laravel-5 captcha


【解决方案1】:

将返回函数重新加载验证码更改为:

public function reloadCaptcha()
{
    return captcha_img('flat');
}

然后将刷新事件脚本改成这样:

<script>
$(document).ready(function(){
    $('#reload').on('click', function(){
        $.ajax({
            type: 'GET',
            url: '/reload-captcha',
            success: function(data) {
                $("#captchadiv").html(data);
            }
        });
    });
});

【讨论】:

    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2016-07-08
    • 2020-06-09
    • 2018-11-02
    相关资源
    最近更新 更多