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); } });
后端代码优化建议(非当前错误原因,但能让代码更健壮)
你的后端逻辑没问题,但可以做一些小调整避免潜在坑:
- 不需要手动加
die();,wp_send_json_success和wp_send_json_error已经会自动终止脚本执行。 - 先验证请求参数是否存在,避免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
相关产品推荐
相关产品推荐

