已经为此工作了2天,并且无法弄清楚IE(v11)和Firefox中导致此失败的原因。适用于Chrome。
在这里阅读了很多关于多个Ajax调用的缓存问题的问题,特别是对于IE,但我不相信这个问题。此代码实际上是页面上的两种形式之一。两者都是通过jQuery提交的,当" 提交全部"单击按钮。但是我禁用了第一个表单,第二个表单仍然无法正常运行。
这里是错误表单提交的JS / Ajax代码:
$("body").on( "submit", ".update-guest-email", function(event) {
event.preventDefault();
var form = $(this);
if( form.find('input[name="email"]').val() == "" ) {
return;
}
if (!formChecker(form)){
return;
}
var dataString = {
action : 'update_guest_party',
data : form.serializeArray()
}
$.ajax({
cache: false,
type: "post",
url: ajaxurl, // This is the WP AJAX handler.
data: dataString,
beforeSend: function() {
form.find('input').prop('disabled', true);
},
success: function(response){ //so, if data is retrieved, store it in response
if (response.data >= 1){
form.append('<div class="center confirmed"><span class="dashicons dashicons-yes"></span></div>');
form.removeClass();
} else {
form.find('input').prop('disabled', false);
$(".errors").html("That's weird; it didn't go through. You can try again or <a href='mailto:email@gmail.com'>send us an email</a>.")
$('.errors').slideDown(250);
}
} // Close success response.
}); // Close AJAX.
}); // End form-submit.
同样,这在Chrome中可以正常运行。 Firebug正确显示POST数据:
action update_guest_party
data[0][name] email
data[0][value] brundeezy@gmail.com
data[1][name] table
data[1][value] dw_wedding_mgr_guests
data[2][name] id
data[2][value] 149
然而,回应只是一个&#39; 0&#39; (零)。对于每个Chrome,响应应如下所示:
{"success":true,"data":1}
非常感谢任何帮助!我在现场服务器上也有这个,如果在生产中看到它会有帮助。
答案 0 :(得分:0)
刚刚发布我的&#34;解决方案&#34;在这里,和往常一样,它是一块蛋糕。
该问题与浏览器无关。正如我们上面开始想到的那样,一切都是服务器端的。 WordPress需要"nopriv" version of its "wp_ajax_" hook才能在网站的前端运行。换句话说,它在其他浏览器中工作的原因是因为我没有以Chrome以外的任何其他方式登录管理员。这也解释了为什么Mark在Chrome中看到同样的问题,因为他(显然)也没有登录过。
以下是我最终使用的代码,以防您想查看示例。相同的功能(&#34; bulk_update_address&#34;),只需要复制上述&#34; nopriv&#34;钩子的版本:
add_action( 'wp_ajax_bulk_update_address', 'bulk_update_address' );
add_action( 'wp_ajax_nopriv_bulk_update_address', 'bulk_update_address' );
我实际上有一个&#34; nopriv&#34;提前排队......只是忘了删除周围的评论。唉,唉,唉。希望这能在将来让人头疼!