通过 jQuery + Ajax 将带有 Google reCaptcha v2 令牌的图像文件发送到 PHP
Send Image file with Google reCaptcha v2 token to PHP via jQuery + Ajax
我想 POST 并通过 AJAX 上传图像并使用 Google reCaptcha v2 验证。但我面临一个问题,我无法发送带有 google recaptcha 令牌的标题文本的图像 Ajax。据我所知,我编写了两个函数,但都不起作用。我做的功能就是代码片段。
请帮助我如何在 Ajax 中使用 PHP / jQuery/ AJAX.
中的 reCaptcha 令牌发送带有文本的图像
$(document).ready(function() {
$("form#addbanner").unbind("submit").bind("submit", function(e) {
//debugger;
e.preventDefault();
grecaptcha.ready(function() {
grecaptcha.execute('MY_RECAPTCHA_CODE', {
action: 'add_web_banner'
}).then(function(token) {
/*let formData = {
imagehere : $('input[name="imagehere"]').val(),
bannertitle : $('input[name="bannertitle"]').val(),
action : 'add_web_banner',
type: 'add_web_banner'
};*/ //not working
/*let formData = {
var formData = new FormData($("form#addWeb-Banner")[0]);
formData.append('token': token);
};*/ //not working
//*POST Image sent in (binary way), I dont want to use JSON in types*//
$.ajax({
type: 'POST',
data: formData,
cache: false,
success: function(response) {
hide_loader();
if (response.status == "success") {
$("form#addWeb-Banner")[0].reset();
alert("Great");
} else {
alert("Ops!");
}
},
});
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="bs-example form-horizontal AddWebBanner" id="addbanner" enctype="multipart/form-data" method="POST">
<div class="form-group col-sm-6">
<label class="col-lg-4 control-label">Upload Image</label>
<div class="col-lg-8">
<input type="file" class="form-control" title="Upload Photo" id="BannerImage" name="imagehere" accept="image/png,image/jpg,image/jpeg" />
</div>
</div>
<div class="form-group col-sm-6">
<label class="col-lg-4 control-label">Caption of Banner</label>
<div class="col-lg-8">
<input type="text" class="form-control" title="Caption of Banner" name="bannertitle" />
</div>
</div>
<div class="form-group">
<div class="col-md-12 col-lg-12">
<button type="submit" name="submit" class="btn btn-sm btn-default pull-right" id="addBannerBtn">POST</button>
</div>
</div>
</form>
将您的 HTML 和 formData 更改为以下内容
为您的标题横幅提供一个 ID 选择器。
<input type="text" class="form-control" id="caption_banner" title="Caption of Banner" name="bannertitle" />
像这样使用 formData 存储,然后通过 ajax
发送 formData
var formData = new FormData();
//Append Image
formData.append('file', $('#BannerImage')[0].files[0]);
//Append banner caption
formData.append('caption', $('#caption_banner').val());
您也可以使用 jQuery .serialize 方法通过 ajax
将数据发送到您的后端
var formData = $('form#addbanner').serialize()
感谢@AlwaysHelping,但有一个错误,但我已经修正了..以下是未来用户问题的正确答案..
我没有在 ajax.. 中提到 processData: false, contentType: false,
所以最终代码将是..
var formData = new FormData();
formData.append('file', $('#BannerImage')[0].files[0]);
formData.append('caption', $('#caption_banner').val());
$.ajax({
type: 'POST',
data: formData,
cache: false,
processData: false,
contentType: false,
success: function (response) { ... }
和平:)
我想 POST 并通过 AJAX 上传图像并使用 Google reCaptcha v2 验证。但我面临一个问题,我无法发送带有 google recaptcha 令牌的标题文本的图像 Ajax。据我所知,我编写了两个函数,但都不起作用。我做的功能就是代码片段。
请帮助我如何在 Ajax 中使用 PHP / jQuery/ AJAX.
中的 reCaptcha 令牌发送带有文本的图像$(document).ready(function() {
$("form#addbanner").unbind("submit").bind("submit", function(e) {
//debugger;
e.preventDefault();
grecaptcha.ready(function() {
grecaptcha.execute('MY_RECAPTCHA_CODE', {
action: 'add_web_banner'
}).then(function(token) {
/*let formData = {
imagehere : $('input[name="imagehere"]').val(),
bannertitle : $('input[name="bannertitle"]').val(),
action : 'add_web_banner',
type: 'add_web_banner'
};*/ //not working
/*let formData = {
var formData = new FormData($("form#addWeb-Banner")[0]);
formData.append('token': token);
};*/ //not working
//*POST Image sent in (binary way), I dont want to use JSON in types*//
$.ajax({
type: 'POST',
data: formData,
cache: false,
success: function(response) {
hide_loader();
if (response.status == "success") {
$("form#addWeb-Banner")[0].reset();
alert("Great");
} else {
alert("Ops!");
}
},
});
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="bs-example form-horizontal AddWebBanner" id="addbanner" enctype="multipart/form-data" method="POST">
<div class="form-group col-sm-6">
<label class="col-lg-4 control-label">Upload Image</label>
<div class="col-lg-8">
<input type="file" class="form-control" title="Upload Photo" id="BannerImage" name="imagehere" accept="image/png,image/jpg,image/jpeg" />
</div>
</div>
<div class="form-group col-sm-6">
<label class="col-lg-4 control-label">Caption of Banner</label>
<div class="col-lg-8">
<input type="text" class="form-control" title="Caption of Banner" name="bannertitle" />
</div>
</div>
<div class="form-group">
<div class="col-md-12 col-lg-12">
<button type="submit" name="submit" class="btn btn-sm btn-default pull-right" id="addBannerBtn">POST</button>
</div>
</div>
</form>
将您的 HTML 和 formData 更改为以下内容
为您的标题横幅提供一个 ID 选择器。
<input type="text" class="form-control" id="caption_banner" title="Caption of Banner" name="bannertitle" />
像这样使用 formData 存储,然后通过 ajax
var formData = new FormData();
//Append Image
formData.append('file', $('#BannerImage')[0].files[0]);
//Append banner caption
formData.append('caption', $('#caption_banner').val());
您也可以使用 jQuery .serialize 方法通过 ajax
将数据发送到您的后端var formData = $('form#addbanner').serialize()
感谢@AlwaysHelping,但有一个错误,但我已经修正了..以下是未来用户问题的正确答案..
我没有在 ajax.. 中提到 processData: false, contentType: false,
所以最终代码将是..
var formData = new FormData();
formData.append('file', $('#BannerImage')[0].files[0]);
formData.append('caption', $('#caption_banner').val());
$.ajax({
type: 'POST',
data: formData,
cache: false,
processData: false,
contentType: false,
success: function (response) { ... }
和平:)