WP REST从请求向错误函数返回值

时间:2017-08-17 作者:DᴀʀᴛʜVᴀᴅᴇʀ

使用WP。SE的帮助我已经学会了如何将表单中的数据发送到WP\\U REST,但现在我遇到了返回自定义错误的问题。我可以成功地将信息传递给WP_REST_Response 我已经添加了一个签入WP_REST_Response 并希望它将错误消息返回到AJAX错误函数,但我遇到了一些问题。

例如,在我的本地盒上,IP是::1 如果我在PHP中创建一个函数:

function ipAddress() {
    if (isset($_SERVER[\'REMOTE_ADDR\'])) :
        $ip_address = clean($_SERVER[\'REMOTE_ADDR\']);
    else :
        $ip_address = "undefined";
    endif;
    return $ip_address;
}
在研究了如何退回支票后,我遇到了:

  • Returning JSON from a PHP Script
  • Clean way to throw php exception through jquery/ajax and json
  • Returning JSON from PHP to JavaScript?WP_REST_Response:

    function vader(\\WP_REST_Request $request) {
        if (ipAddress() == "::1") :
            return json_encode(array(
                \'error\' => \'you are localhost\'
                ));
        endif;
    }
    
    在我的维达。js如果我使用:

    error: function(data) {
        throw data.error;
     },
    
    但控制台中没有错误,它显示{"error":"you are localhost"} 但我只是想让这个值转到error函数。

    正在查看jQuery.ajax() documentation 我发现statusCode 我可以得到:

    if (ek_ip_address() == "::1") :
        return new WP_Error(\'foo\', \'bar\', array(\'status\' => 404));
    endif;
    
    以及:

    statusCode: {
        404: function() {
            $(\'#testForm\').append("thrown 404s");
        }
    }
    
    有没有办法error 我是不是误解了AJAXerror? 我做错了什么?如何从WP_REST_REQUEST 前往error 作用

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

Ajax调用可以发送到任何地方。它可以是运行PHP的服务器、使用C#模拟的虚拟本地路由或其他任何东西。因此,Ajax不关心响应是什么,因为它无法理解它。

当您从服务器发回任何数据时,只要状态为200(或错误除外),Ajax脚本就会认为这是一个成功的请求。之后,由你根据自己的反应来处理这种情况。

举个简单的例子,我是英语初学者。我使用;“错误”word而不是“em”;“成功”并将其作为响应返回。

$data[\'status\'] = \'error\';
$data[\'message\'] = \'Nice! Request has been done.\';
return $data;
服务器确实成功运行了任务,但发送了错误的状态。Ajax怎么会知道这一点?

因此,Ajax调用的错误部分是针对请求出现问题时,在请求完成之前,而不是之后。在发送响应后,Ajax完成了它的工作,这被认为是一个成功的请求。

现实生活中的例子,假设你给一个朋友写了一封信,请他加入你的事业。您就是;“用户”这里此处的函数这里
  • 你可以选择是尖叫、喊叫还是哭泣,因为你的朋友很严格;否“(错误处理)。这不是邮递员的问题
  • SO网友:montrealist

    正如Jack正确指出的那样,既然请求成功了,您就永远不会在error 回调。您需要处理服务器在success 的回调jQuery.ajax():

    success: (data) => {
        if(\'error\' in data) {
            // server returned `error` property in payload - something is wrong!
        }
    }
    
    如果您没有使用ES6:

    success:function(data) {
        if(data && typeof data.error !== \'undefined\') {
            // show error message to user
        }
    }
    

    结束

    相关推荐

    如何在AJAX响应中呈现快捷码?

    问题我有一个单页布局,显示一个手风琴式的页面标题WP菜单。我使用AJAX将相应页面的WP内容加载并显示到一个div中,该div将get插入菜单的列表项中,这是可行的。The problem I have is this: 我无法使用AJAX调用来处理第三方短代码,相反,它们是以原始状态呈现的(例如:[buzzsprout])。然而,值得注意的是,本机WP短代码似乎呈现良好(如最新消息选项卡中所示:[音频])。因此,这似乎仅限于来自插件的第三方短代码。最后,我在多个地方读到,这可能是一个限制,因为WP AJ