奇怪的jQuery错误消息

时间:2012-05-16 16:19:35

标签: javascript jquery arrays json console

获取

Syntax error, unrecognized expression: [object Object] @ jquery.js:4267

这是来自jQ

的一段代码
Sizzle.error = function( msg ) {
throw new Error( "Syntax error, unrecognized expression: " + msg ); // Line 4267
}; 

详细

我已经预先声明了数组aoData。这个数组是由Datatables创建的,我对数组结构没有任何控制。

当我像这样一个接一个地手动推动params时:

aoData.push( { "name": "process", "value": "fetch" } );

效果很好,没有任何错误消息。

但问题是,当我尝试在脚本顶部声明数组tableXtraPostParams并将这个数组的参数逐个推入aoData时,它仍能正常工作,但是奇怪的错误消息不是来自我的代码,而是来自jQuery。

Syntax error, unrecognized expression: [object Object] @ jquery.js:4267

以下是一段代码:(当我删除$.each循环时,错误消息消失)

var tableXtraPostParams = {
    "process":"fetch",
    "which":"mine"
};
$.each(tableXtraPostParams, function(n, v){
    aoData.push( {
       "name": n, 
       "value": v
    } );
});

以下是推送前aoData的内容

[Object { name="sEcho", value=1}, Object { name="iColumns", value=8}, Object { name="sColumns", value=""}, Object { name="iDisplayStart", value=0}, Object { name="iDisplayLength", value=25}, Object { name="mDataProp_0", value=0}, Object { name="mDataProp_1", value=1}, Object { name="mDataProp_2", value=2}, Object { name="mDataProp_3", value=3}, Object { name="mDataProp_4", value=4}, Object { name="mDataProp_5", value=5}, Object { name="mDataProp_6", value=6}, Object { name="mDataProp_7", value=7}, Object { name="sSearch", value=""}, Object { name="bRegex", value=false}, Object { name="sSearch_0", value=""}, Object { name="bRegex_0", value=false}, Object { name="bSearchable_0", value=true}, Object { name="sSearch_1", value=""}, Object { name="bRegex_1", value=false}, Object { name="bSearchable_1", value=true}, Object { name="sSearch_2", value=""}, Object { name="bRegex_2", value=false}, Object { name="bSearchable_2", value=true}, Object { name="sSearch_3", value=""}, Object { name="bRegex_3", value=false}, Object { name="bSearchable_3", value=true}, Object { name="sSearch_4", value=""}, Object { name="bRegex_4", value=false}, Object { name="bSearchable_4", value=true}, Object { name="sSearch_5", value=""}, Object { name="bRegex_5", value=false}, Object { name="bSearchable_5", value=true}, Object { name="sSearch_6", value=""}, Object { name="bRegex_6", value=false}, Object { name="bSearchable_6", value=true}, Object { name="sSearch_7", value=""}, Object { name="bRegex_7", value=false}, Object { name="bSearchable_7", value=true}, Object { name="iSortingCols", value=1}, Object { name="iSortCol_0", value=0}, Object { name="sSortDir_0", value="asc"}, Object { name="bSortable_0", value=true}, Object { name="bSortable_1", value=true}, Object { name="bSortable_2", value=true}, Object { name="bSortable_3", value=true}, Object { name="bSortable_4", value=true}, Object { name="bSortable_5", value=true}, Object { name="bSortable_6", value=true}, Object { name="bSortable_7", value=true}]

这是推后

[Object { name="sEcho", value=1}, Object { name="iColumns", value=8}, Object { name="sColumns", value=""}, Object { name="iDisplayStart", value=0}, Object { name="iDisplayLength", value=25}, Object { name="mDataProp_0", value=0}, Object { name="mDataProp_1", value=1}, Object { name="mDataProp_2", value=2}, Object { name="mDataProp_3", value=3}, Object { name="mDataProp_4", value=4}, Object { name="mDataProp_5", value=5}, Object { name="mDataProp_6", value=6}, Object { name="mDataProp_7", value=7}, Object { name="sSearch", value=""}, Object { name="bRegex", value=false}, Object { name="sSearch_0", value=""}, Object { name="bRegex_0", value=false}, Object { name="bSearchable_0", value=true}, Object { name="sSearch_1", value=""}, Object { name="bRegex_1", value=false}, Object { name="bSearchable_1", value=true}, Object { name="sSearch_2", value=""}, Object { name="bRegex_2", value=false}, Object { name="bSearchable_2", value=true}, Object { name="sSearch_3", value=""}, Object { name="bRegex_3", value=false}, Object { name="bSearchable_3", value=true}, Object { name="sSearch_4", value=""}, Object { name="bRegex_4", value=false}, Object { name="bSearchable_4", value=true}, Object { name="sSearch_5", value=""}, Object { name="bRegex_5", value=false}, Object { name="bSearchable_5", value=true}, Object { name="sSearch_6", value=""}, Object { name="bRegex_6", value=false}, Object { name="bSearchable_6", value=true}, Object { name="sSearch_7", value=""}, Object { name="bRegex_7", value=false}, Object { name="bSearchable_7", value=true}, Object { name="iSortingCols", value=1}, Object { name="iSortCol_0", value=0}, Object { name="sSortDir_0", value="asc"}, Object { name="bSortable_0", value=true}, Object { name="bSortable_1", value=true}, Object { name="bSortable_2", value=true}, Object { name="bSortable_3", value=true}, Object { name="bSortable_4", value=true}, Object { name="bSortable_5", value=true}, Object { name="bSortable_6", value=true}, Object { name="bSortable_7", value=true}, Object { name="process", value="fetch"}, Object { name="which", value="all"}]

我试图解决的问题

  1. 我下载了jQ 1.7.2(开发版)并用缩小的1.7.2替换。没有成功!
  2. 我试着写
  3. for( var p in tableXtraPostParams ) {
        aoData.push( {
           "name": p,
           "value": tableXtraPostParams[p]
        } );
    } 
    

    而不是$ .each。没有成功!

    我在这里缺少什么?我真的不知道,为什么这个错误消息会出现在Firefox日志中,当我尝试从$ .each内部推送时,代码仍能完美运行。

    任何建议都将不胜感激!

    请注意

    以下是逐个版本(不含$ .each):datatables.net/examples/server_side/custom_vars.html

1 个答案:

答案 0 :(得分:1)

我希望你找错了地方。如果您正在迭代和扩充的对象和数组不是jQuery实例,并且您可以在不使用$ .each的情况下重现它,我认为您应该看看以后如何使用aoData。

Sizzle是选择器引擎,所以寻找你做这样的事情的地方:

$(aoData[0])

在这个假设的情况下,你正在让jQuery认为它有一个选择器,但是你已经将它传递给了其他东西。

希望有所帮助!