SyntaxError:位于1的JSON中的意外标记

时间:2018-03-23 01:38:43

标签: javascript php jquery json post

我正在制作一个插件。我试图通过在这个PHP代码中发布一个数组/对象/ json数组来简单地更新Wordpress中的post meta:

var SaveOptionSettings = function(postid, count){
    var save_array = new Array();
    save_array[0]= {};
    save_array[0]['post_id'] = postid;
    save_array[0]['content_count'] = count;
    save_array[1] = {};
    for(var i=0; i<$('#settings input').length; i++){
      save_array[1][$('#settings input').eq(i).attr('id')] = $('#settings input').eq(i).val();
    }
    for(var i=0; i<$('#settings textarea').length; i++){
      save_array[1][$('#settings textarea').eq(i).attr('id')] = $('#settings textarea').eq(i).val();
    }
    for(var i=0; i<$('#settings select').length; i++){
      save_array[1][$('#settings select').eq(i).attr('id')] = $('#settings select').eq(i).val();
    }
    console.log(save_array, JSON.stringify(save_array));
    var pva_ajax_url = pva_params.pva_ajax_url;

    $.ajax({
        type: 'POST',
        url: pva_ajax_url,
        dataType: 'json',
        data: {
            action: 'save_settings_fields',
            'to_save': JSON.stringify(save_array)
        }, success: function (result) {
          M.toast({html: 'Saved!'})
        },
        error: function(xhr,textStatus,err)
        {
            console.log("readyState: " + xhr.readyState);
            console.log("responseText: "+ xhr.responseText);
            console.log("status: " + xhr.status);
            console.log("text status: " + textStatus);
            console.log("error: " + err);
        }
    });
  }

我的脚本是:

wp_send_json

$_POST几乎只是将readyState: 4 responseText: string(202) "[{\"post_id\":15404,\"content_count\":1},{\"label\":\"Options <span>(please select one)</span>\",\"use_conditionals\":\"on\",\"classes\":\"form-buttons\",\"style_id\":\"options\",\"subtitle\":\"test\"}]" null status: 200 text status: parsererror error: SyntaxError: Unexpected token s in JSON at position 1 获得的内容发回给我,显然是:

json_decode

我尝试过的事情:

  • 在发布的信息上使用contentType: "application/json"
  • .push添加到AJAX
  • 删除Stringify,dataType,将dataType更改为Text
  • 的所有组合
  • 使每个变量都被{{1}}编入数组
  • 使数组成为对象,反之亦然

我做错了吗?

1 个答案:

答案 0 :(得分:2)

您的服务器响应以字符串(202)开头, 这不是有效的json

string(202) "[{\"post_id\":15404,\"content_count\":1},{\"label\":\"Options <span>(please select one)</span>\",\"use_conditionals\":\"on\",\"classes\":\"form-buttons\",\"style_id\":\"options\",\"subtitle\":\"test\"}]"
null

error: SyntaxError: Unexpected token s in JSON at position 1 

这是来自String

你的responseText应该是

[{
    "post_id": 15404,
    "content_count": 1
}, {
    "label": "Options <span>(please select one)</span>",
    "use_conditionals": "on",
    "classes": "form-buttons",
    "style_id": "options",
    "subtitle": "test"
}]

// update

@ lawrence-cherone php-side提到

var_dump()

wp_send_json(var_dump($_POST['to_save']));

此行需要删除或评论

感谢@ lawrence-cherone

此外,如果您想调试内容,则可以使用echoprint_r获得更好的成功。

使用其中一个打印您输入页面的内容,然后在AJAX result中将其作为success: function(result){ ... }返回。