You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress REST API报rest_invalid_json错误的原因排查与解决求助

分析与解决:WordPress REST API 返回 rest_invalid_json 错误

嘿,我一眼就看出问题出在哪了——这个错误的核心原因是前端发送的请求体不是有效的JSON格式。虽然你设置了contentType: 'application/json',但并没有把请求数据序列化为JSON字符串,WordPress的REST API根本解析不了这种格式的数据,所以直接抛出了rest_invalid_json错误。

核心问题拆解

  • 你的AJAX请求里,data传的是普通JavaScript对象,但搭配contentType: 'application/json'时,必须把对象转成JSON字符串,否则服务器收到的是form-urlencoded格式的数据,不是JSON。
  • 另外,datatype是拼写错误,应该是**dataType**(注意大小写),这个不是当前错误的直接原因,但不修正可能会导致后续解析响应出问题。

修复后的前端代码(file.js)

$.ajax({
    type: 'POST',
    url: myAjax.restURL + 'activeAupair/v1/updateEmployeePhoto',
    contentType: 'application/json', // 保持这个设置
    dataType: 'json', // 修正拼写错误
    // 关键:把数据转成JSON字符串
    data: JSON.stringify({
        photo: photo,
        photoPrivacy: getPhotoPrivacy(),
        photoDescription: getPhotoDescription()
    }),
    beforeSend: function (xhr) {
        xhr.setRequestHeader('X-WP-Nonce', myAjax.nonce);
    },
    success: function(response){
        console.log('TYPE OF ', typeof response);
        console.log('RESPONSE ', response);
        msg.empty();
        msg.append($('<p id="required"></p>').text('Updated'));
        uploadBtn.attr('value', 'Update');
        uploadBtn.attr('disabled', false);
    },
    error: function (xhr, ajaxOptions, thrownError) {
        console.error('Error Details:', xhr.responseJSON); // 加上这个方便调试错误详情
    },
    complete: function(data){
        console.log('COMPLETE ', data);
    }
});

后端代码优化建议(非当前错误原因,但能让代码更健壮)

你的后端逻辑没问题,但可以做一些小调整避免潜在坑:

  1. 不需要手动加die();,wp_send_json_success和wp_send_json_error已经会自动终止脚本执行。
  2. 先验证请求参数是否存在,避免Undefined Index错误;另外wpdb->update返回0的时候(比如没有行被修改)不应该算错误,用!==false判断更准确。

优化后的后端代码:

function update_employee_photo($request){
    global $wpdb;
    // 先获取并验证必填参数
    $photo = $request->get_param('photo');
    $photo_privacy = $request->get_param('photoPrivacy');
    $photo_description = $request->get_param('photoDescription');
    
    if (empty($photo_privacy) || empty($photo_description)) {
        return wp_send_json_error('Missing required parameters', 400);
    }

    $data = array(
        'photo_privacy' => $photo_privacy,
        'photo_description' => $photo_description
    );
    // 只有photo不是"null"的时候才添加到数据里
    if ($photo !== "null") {
        $data['photo'] = $photo;
    }

    $where = array('wp_user_id' => get_current_user_id());
    $result = $wpdb->update("aupair_registered_employee", $data, $where);
    
    if($result !== false){ 
        wp_send_json_success($result, 200);
    } else {
        wp_send_json_error(array(
            'query' => $wpdb->last_query,
            'error' => $wpdb->last_error
        ), 500);
    }
}
add_action('rest_api_init', function(){
    register_rest_route(
        'activeAupair/v1',
        '/updateEmployeePhoto',
        [
            'methods' => 'POST',
            'callback' => 'update_employee_photo'
        ]);
});

总结

先把前端的data用JSON.stringify()转成JSON字符串,再修正dataType的拼写,这个错误应该就能解决了。后端的优化是为了让代码更健壮,避免后续出现参数缺失或误判更新结果的问题。

内容的提问来源于stack exchange,提问作者luna moonfang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:17:46