Ajax在IE / Firefox中调用返回零

时间:2015-07-02 03:39:45

标签: javascript jquery ajax internet-explorer firefox

已经为此工作了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}

非常感谢任何帮助!我在现场服务器上也有这个,如果在生产中看到它会有帮助。

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;提前排队......只是忘了删除周围的评论。唉,唉,唉。希望这能在将来让人头疼!