"code":"rest_invalid_json","message":"Invalid JSON body passed."

沃德普拉斯 发布于 3年前 分类:WordPress

ajax请求wordpress rest api报错:("code":"rest_invalid_json","message":"Invalid JSON body passed.")

我不明白我做错了什么,谁能给我一个关于导致上述错误的原因的建议,下面是我的代码。我可以确认,我成功地到达了路线,因为里面的代码得到了它的执行。我还在最后添加了 1 值,按照 wp_send_json_success 将其传递给 json。在这一点上我不知道接下来要做什么,有人可以向我解释一下发生了什么吗?

router.php

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">update_employee_photo</span>(<span class="hljs-params"><span class="hljs-variable">$request</span></span>)</span>{
    <span class="hljs-keyword">global</span> <span class="hljs-variable">$wpdb</span>;
    <span class="hljs-variable">$data_with_photo</span> = <span class="hljs-keyword">array</span>(
            <span class="hljs-string">'photo'</span>             => <span class="hljs-variable">$request</span>[<span class="hljs-string">'photo'</span>],
            <span class="hljs-string">'photo_privacy'</span>     => <span class="hljs-variable">$request</span>[<span class="hljs-string">'photoPrivacy'</span>],
            <span class="hljs-string">'photo_description'</span> => <span class="hljs-variable">$request</span>[<span class="hljs-string">'photoDescription'</span>]
    );
    <span class="hljs-variable">$data_null_photo</span> = <span class="hljs-keyword">array</span>(
        <span class="hljs-string">'photo_privacy'</span>     => <span class="hljs-variable">$request</span>[<span class="hljs-string">'photoPrivacy'</span>],
        <span class="hljs-string">'photo_description'</span> => <span class="hljs-variable">$request</span>[<span class="hljs-string">'photoDescription'</span>]
    );

    <span class="hljs-variable">$data</span>   = (<span class="hljs-variable">$request</span>[<span class="hljs-string">'photo'</span>] != <span class="hljs-string">"null"</span>) ? <span class="hljs-variable">$data_with_photo</span> : <span class="hljs-variable">$data_null_photo</span>;
    <span class="hljs-variable">$where</span>  = <span class="hljs-keyword">array</span>(<span class="hljs-string">'wp_user_id'</span> => get_current_user_id());
    <span class="hljs-variable">$result</span> = <span class="hljs-variable">$wpdb</span>->update(<span class="hljs-string">"aupair_registered_employee"</span>, <span class="hljs-variable">$data</span>, <span class="hljs-variable">$where</span>);
    <span class="hljs-keyword">if</span>(<span class="hljs-variable">$result</span>){
        wp_send_json_success(<span class="hljs-variable">$result</span>, <span class="hljs-number">200</span>, <span class="hljs-number">1</span>);
    } <span class="hljs-keyword">else</span> {
        wp_send_json_error(<span class="hljs-variable">$wpdb</span>->last_query);
    }
    <span class="hljs-keyword">die</span>();
}

add_action(<span class="hljs-string">'rest_api_init'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>()</span>{
    register_rest_route( <span class="hljs-string">'activeAupair/v1'</span>, <span class="hljs-string">'/updateEmployeePhoto'</span>, [
        <span class="hljs-string">'methods'</span>  => <span class="hljs-string">'POST'</span>,
        <span class="hljs-string">'callback'</span> => <span class="hljs-string">'update_employee_photo'</span>
    ]);
});

file.js

  $.<span class="hljs-title function_">ajax</span>({
            <span class="hljs-attr">type</span>: <span class="hljs-string">'POST'</span>,
            <span class="hljs-attr">url</span>: myAjax.<span class="hljs-property">restURL</span> + <span class="hljs-string">'activeAupair/v1/updateEmployeePhoto'</span>,
            <span class="hljs-attr">contentType</span>: <span class="hljs-string">'application/json'</span>,
            <span class="hljs-attr">datatype</span>: <span class="hljs-string">'json'</span>,
            <span class="hljs-attr">data</span>: {
                <span class="hljs-attr">photo</span>: photo,
                <span class="hljs-attr">photoPrivacy</span>: <span class="hljs-title function_">getPhotoPrivacy</span>(),
                <span class="hljs-attr">photoDescription</span>: <span class="hljs-title function_">getPhotoDescription</span>()
            },
            <span class="hljs-attr">beforeSend</span>: <span class="hljs-keyword">function</span> (<span class="hljs-params">xhr</span>) {
                xhr.<span class="hljs-title function_">setRequestHeader</span>(<span class="hljs-string">'X-WP-Nonce'</span>, myAjax.<span class="hljs-property">nonce</span>);
            },
            <span class="hljs-attr">success</span>: <span class="hljs-keyword">function</span>(<span class="hljs-params">response</span>){
                <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'TYPE OF '</span>, <span class="hljs-keyword">typeof</span> response);
                <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'RESPONSE '</span>, response);
                msg.<span class="hljs-title function_">empty</span>();
                msg.<span class="hljs-title function_">append</span>($(<span class="hljs-string">'<p id="required"></p>'</span>).<span class="hljs-title function_">text</span>(<span class="hljs-string">'Updated'</span>));
                uploadBtn.<span class="hljs-title function_">attr</span>(<span class="hljs-string">'value'</span>, <span class="hljs-string">'Update'</span>);
                uploadBtn.<span class="hljs-title function_">attr</span>(<span class="hljs-string">'disabled'</span>, <span class="hljs-literal">false</span>);
            },
            <span class="hljs-attr">error</span>: <span class="hljs-keyword">function</span> (<span class="hljs-params">xhr, ajaxOptions, thrownError</span>) {
            },
            <span class="hljs-attr">complete</span>: <span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>){
               <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'COMPLETE '</span>, data);
            }
      });
1631153101-11

1个回复

  • ttt5

    根据 wordpress wp_send_json_success() 函数期望第三个参数 1(默认为 0)将其编码为 JSON 格式(请参阅参考资料)。因此,您需要将状态代码作为第二个参数传递,并将 1 传递给 JSON 对象。

    wp_send_json_success($result, 200, 1);