我无法从AJAX获取返回值

时间:2019-07-24 作者:Prdufresne

我有一个HTML表单,用于向后端服务器发送消息。当用户单击send按钮时,它会触发一个javascript,该javascript对WordPress进行Ajax调用,然后对后端服务器进行API调用以发送消息。这部分工作完美无瑕。然后服务器用一个字符串进行响应,我希望返回到javascript以在表单中显示该字符串。

由于某种原因,我无法获取javascript的返回值。我已将我的功能剥离为以下内容:

function smsgte_admin_send() {
    check_ajax_referer(\'smsgte_nonce\', \'security\');    
    $response = admin_server_send(filter_input(INPUT_POST, \'message\', FILTER_SANITIZE_STRING));

    $result = array (
        //\'response\' => $repsonse,
        \'response\' => \'just a response\',
    );

    return $result;
}
Theadmin_server_send 触发发送到服务器的消息。消息到达服务器,因此正常工作。我询问服务器的响应,所以我只是用一个随机字符串填充结果数组,但javascript从未收到该字符串。

javascript代码是:

function smsgteAdminSend(button) {
    var message = document.getElementById("smsgte_admin_message").value;

    jQuery(document).ready(function ($) {
        var data = {
            \'action\': \'smsgte_admin_send\',
            \'message\': message,
            \'security\': smsgte_Ajax.ajax_nonce,
        };
        jQuery.post(smsgte_Ajax.ajaxurl, data, function (response, status) {

            document.getElementById("smsgte_admin_send_response").innerHTML = response.response;

        });
    });

}
最初,我将响应作为字符串而不是键/值对发送,但这也不起作用。我忍不住想我错过了一些简单的东西。

2 个回复
最合适的回答,由SO网友:majick 整理而成

返回结果数组只会返回到调用它的PHP函数,实际上您需要通过回显来输出它,在这种情况下,因为它是一个数组,所以在输出之前用JSON对其进行编码。所以return $result 成为:

echo json_encode($result); exit;
然后向javascript调用添加数据类型,以便它能够识别数组数据:

    var data = {
        \'action\': \'smsgte_admin_send\',
        \'message\': message,
        \'security\': smsgte_Ajax.ajax_nonce,
        \'dataType\': \'json\'
    };
有关更完整的示例,请参见此答案:https://stackoverflow.com/a/8823995/5240159

SO网友:Prdufresne

@majick提供的答案是正确的。我发布这个答案是为了说明我是如何修改代码示例的。

function smsgte_admin_send() {
    check_ajax_referer(\'smsgte_nonce\', \'security\');    
    $response = admin_server_send(filter_input(INPUT_POST, \'message\', FILTER_SANITIZE_STRING));
    echo $response;
    wp_die();
}
javascript代码已更改为:

function smsgteAdminSend(button) {
    var message = document.getElementById("smsgte_admin_message").value;

    jQuery(document).ready(function ($) {
        var data = {
            \'action\': \'smsgte_admin_send\',
            \'message\': message,
            \'security\': smsgte_Ajax.ajax_nonce,
        };
        jQuery.post(smsgte_Ajax.ajaxurl, data, function (response, status) {

            document.getElementById("smsgte_admin_send_response").innerHTML = response;

        });
    });

}
在这个问题中,我发送了一个键/值对,因为我认为jQuery需要一个对象。因为我需要做的是回显响应,所以键/值对是不必要的,我只是回显响应字符串。

相关推荐

用AJAX重新生成基于<SELECT>值的WordPress快捷码

我正在尝试生成&;根据用户选择的<select> 选项我已经在下面发布了我迄今为止的进度,而短代码目前正在表单上被替换POST, 它不支持AJAX—整个页面正在重新加载。我一直试图让这个问题尽可能的笼统,以(希望)帮助其他人,但我对AJAX的经验很少,所以如果能给我提供一些建议,说明我把事情搞砸了,我将不胜感激。PHP在实施方面的背景;[table_generator] 是包含窗体和生成的“子”短代码的父短代码。当用户从下拉列表中选择一个提供者并点击提交按钮时,将在下面生成一个短代码,显