【发布时间】: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 代码,它也可以工作。
所以两件事情中的一件正在发生:
- captcha_img() 函数在响应步骤中失败。所以没有任何回报。
- 表单中的 javascript 无法从返回的 json 对象中提取图像。
我猜问题是#1。不知何故,控制器无法调用 captcha_img() 函数,而主 php/html 可以。我不知道为什么会这样。
请注意,在我的实验中,我输入了一个显示数据和状态的警报,数据显示一个“对象”,状态为“成功”。
更新
我放弃了。无论出于何种原因,我只是无法让它工作,我现在不能再花时间在它上面了。我最终决定让按钮重新加载整个页面,而不是尝试生成一个新的验证码图像以插入到 html 中。
【问题讨论】:
-
我检查了您的链接并将其更改为 flat、mini、default、math 和 inverse 类型的验证码,它工作正常。
-
你的 /reload-captcha 返回:{ "captcha": "" }
-
我正在尝试各种方法来尝试确定重新加载不起作用的原因。这就是为什么有 earth2.png 参考来看看我是否可以用静态图像换掉验证码图像。当我在玩代码时,你碰巧检查了它。
标签: javascript php laravel-5 captcha