Jquery JSON ajax语法错误:JSON.parse:意外字符

Jquery JSON ajax语法错误:JSON.parse:意外字符,jquery,ajax,json,serialization,param,Jquery,Ajax,Json,Serialization,Param,我所要做的就是从用户输入的输入元素中构建一个对象,而无需单击submit。除了我没有在主机页上正确获取$\u POST数组之外,这些函数应该可以完成这项工作: 我开始认为我可以创建一个简单的json对象并将其字符串化,然后将其作为“json”数据类型进行ajax。那是行不通的。我不断收到解析器错误,“意外字符..”。我使用外部解析器检查生成的对象,每次都是有效的。 因此,我修改了序列化以创建jquery.param对象,如下所示 console.log中的输出如下所示: [ [{ hostna

我所要做的就是从用户输入的输入元素中构建一个对象,而无需单击submit。除了我没有在主机页上正确获取$\u POST数组之外,这些函数应该可以完成这项工作:

我开始认为我可以创建一个简单的json对象并将其字符串化,然后将其作为“json”数据类型进行ajax。那是行不通的。我不断收到解析器错误,“意外字符..”。我使用外部解析器检查生成的对象,每次都是有效的。 因此,我修改了序列化以创建jquery.param对象,如下所示

console.log中的输出如下所示:

 [ [{ hostname: 'myhostname'}, {userdb1:'mydbname'}, {adminname:'guest'}, {adminpassword:'abc123'}, {username:'muuser'}, {password:'myuser'} ] 
主机上的var_dump[$_POST]如下所示:

  Array ( [0] => [ [1] => { [2] => [3] => h [4] => o [5] => s [6] => t [7] => n [8] => a [9] => m [10] => e [11] => : [12] => [13] => ' [14] => m [15] => y [16] => h [17] => o [18] => s [19] => t [20] => n [21] => a [22] => m [23] => e [24] => ' [25] => } [26] => , [27] => [28] => { [29] => u [30] => s [31] => e [32] => r [33] => d [34] => b [35] => 1 [36] => : [37] => ' [38] => m [39] => y [40] => d [41] => b [42] => n [43] => a [44] => m [45] => e [46] => ' [47] => } [48] => , [49] => [50] => { [51] => a [52] => d [53] => m [54] => i [55] => n [56] => n [57] => a [58] => m [59] => e [60] => : [61] => ' [62] => g [63] => u [64] => e [65] => s [66] => t [67] => ' [68] => } [69] => , [70] => [71] => { [72] => a [73] => d [74] => m [75] => i [76] => n [77] => p [78] => a [79] => s [80] => s [81] => w [82] => o [83] => r [84] => d [85] => : [86] => ' [87] => a [88] => b [89] => c [90] => 1 [91] => 2 [92] => 3 [93] => ' [94] => } [95] => , [96] => [97] => { [98] => u [99] => s [100] => e [101] => r [102] => n [103] => a [104] => m [105] => e [106] => : [107] => ' [108] => m [109] => u [110] => u [111] => s [112] => e [113] => r [114] => ' [115] => } [116] => , [117] => [118] => { [119] => p [120] => a [121] => s [122] => s [123] => w [124] => o [125] => r [126] => d [127] => : [128] => ' [129] => m [130] => y [131] => u [132] => s [133] => e [134] => r [135] => ' [136] => } [137] => [138] => ] ) 
这是怎么回事。需要获得这些键/值简单用户创建的对象的$\u POST数组,无需表单序列化

下面是函数

    function savePageInputs(idtags,targetOutId)
    {
        var method = 'post';
        var phpscript = 'savedata.php';
        var data = new Array();
        for(var i=0;i<idtags.length;i++)
        {
            tag = idtags[i];
            data[i] = $(\"#\"+tag).val(); //get their values
        }

        jsonData = makeJsonData(idtags,data); //make JSON object
        shipJsonToHost(jsonData, phpscript, method, targetOutId);
    }
    function makeJsonData(idtags,values)
    {
        tag = idtags[0];
        val = values[0];
        jsonData =  '[{ '+ tag +': '+'\''+val+'\'}' ;
        for(var i=1;i<idtags.length;i++)
        {                                
            tag = idtags[i];
            val = valueList[i];
            jsonData += ', {' + tag+':'+ '\''+val+'\'}' ;
        }
        jsonData +=  ' ]' ;    
        return jsonData;
    }
    function shipJsonToHost(jsonData, phpscript, method, targetOutId)
    {
        jQuery.ajaxSettings.traditional = true;
        var outputTo = $(\"#\"+targetOutId);
        outputTo.append('<center>Processing...<br/> <img src=\"images/loading.gif\" height=50 width=50></center>');
        $.ajax
        (
            { 
                data: $.param(jsonData) ,
                type: method, 
                dataType: 'text',
                url: phpscript, 
                success: function(response) 
                {                         
                    outputTo.empty();
                    outputTo.append(response);
                },  
                error: function(request, errorType, errorThrown)
                {                
                    outputTo.html('Error: '+errorType+ ' '+errorThrown);
                }
           }
        );  
    }
函数savePageInputs(idtags、targetOutId)
{
var方法='post';
var phpscript='savedata.php';
var data=新数组();

对于(var i=0;i不要忘记json的实际语法

  • [{test:1}]
    无效
  • [{'test':1}]
    无效
  • [{“测试”:1}]
    有效
  • [{“value”:“test'}]
    无效
  • [{“value”:“test”}]
    有效

尝试将makeJsonData函数中的所有单引号替换为一些双引号;通常这样做会起作用

对不起,这是我在控制台上的剪切粘贴错误。logtry setting
jQuery.ajaxSettings.traditional=false;
或删除它(默认为false)不幸的是,这并没有什么区别。因为您正在通过嵌套数组,当您以URL编码格式序列化并依赖于服务器来解析它时,这是相当复杂的。请考虑将JSON字符串发送到服务器,服务器可以解析JSON字符串。谢谢。我意识到并修复了它。我也发现了它。不喜欢值和“}”之间的空格。这是非常严格的。无论如何,我切换到了“text”和$.param编码,它在$\u POST主机变量中为php脚本提供了一个未格式化的数据流。重新格式化非常简单:$hostdata=infrade(“”,$\u POST)然后myarray=json\u decode($hostdata)。这就解决了问题