【求助】javascript 多维数组object混用后 报错! SyntaxError: missing ] after element list

用户昵称不能为空 2012-12-25 05:53:40
一个比较基础的问题。以下这个函数里面的eval那一段报错,求助。

报错提示:

SyntaxError: missing ] after element list


函数源码:


/*
#发送的参数
@callbackObj 选填,两种情况
(1) string类型,即函数名
(2) object类型,包含2个元素,callbackObj[0]函数名称,callbackObj[1]传递的参数
注意:如果传递callbackObj进来请使用 [[],[]] 而不要使用 {'':''}
*/
function upcount(db,_id,divObj,callbackObj,_cookie,returndata)
{
if(divObj)
{
var oldHtml = divObj.innerHTML;
divObj.innerHTML = '正在提交请求...';
}

var postdata = {'db':db,'id':_id,'cookie':_cookie,'returndata':returndata};
var posturl = '/api/upcount.php?_t'+(new Date()).valueOf();
$.post(posturl,postdata,function(returnString){
if(typeof callbackObj == 'string')
{
eval(";\n"+callbackObj+"("+returnString+");\n");
return ;
} else if(typeof callbackObj == 'object' && typeof(callbackObj[0]) == 'string' &&
typeof(callbackObj[1]) != 'undefined' ) {

/* [17:44:08.123] SyntaxError: missing ] after element list @ http://127.0.0.1/include/js/common.js:755 */
eval(";\n"+callbackObj[0]+"("+returnString+","+[callbackObj[1]]+");\n");

/* 如果去掉那个 callbackObj[1] 就不报错这里 alert(callbackObj[1]) 输出为“[object Object],[object Object]”*/
//eval(";\n"+callbackObj[0]+"("+returnString+");\n");


alert('error now! ');
return;
} else if(typeof callbackObj != 'undefined') {
alert("System Error!");
return;
}

eval('var json = '+returnString+';');
if(typeof json != 'object') return ;
try {
if(json.rst == 200 && divObj)
{
if(json.msgOk) divObj.innerHTML = json.msgOk;
if(json.msgInit)
{
window.setTimeout(function(){divObj.innerHTML = json.msgInit; },5000);
}
} else if(json.rst == 304) {
//alert(json.msg);
alert('您好,您已经提交过了!谢谢您的操作!');
if(divObj && oldHtml && divObj.innerHTML!=oldHtml) divObj.innerHTML=oldHtml;
}
}catch(e) {}
});
}





对js 里面object的用法还是比较迷糊。我使用的callbackObj 是这样用的 :



var a = $('#id1');//对象
var b = $('#id2');//对象
var func = 'callbackFuncName'; //string
upcount('tb',9999,null,[func,[a,b]]); //执行函数



问题就在这个中括号这里。[]但是如何写可以最好的将参数传递进入?一直报错 。{}的写法却必须要有键名。



















...全文
1393 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 bbjbepzz 的回复:
a b两个是jQuery对象,你提交到后台干什么。而且returndata是一个数组,你提交到后台前,应该把它转换成一个json字符串。用JSON.stringify(returndata)处理下。
已经换了一种方法实现了。 需求是,一个表格,每一行每点击一次就自动发送一次请求,并且在对应的那一行显示请求结果。 然后我用了hover 绑定每一行的点击,执行请求的就自动绑定了。 传入的两个obj是显示结果的两个div的 jquery dom对象。 后来实在是不行,直接用id了,传入id,然后在callback函数里面处理了。
bbjbepzz 2012-12-25
  • 打赏
  • 举报
回复
a b两个是jQuery对象,你提交到后台干什么。而且returndata是一个数组,你提交到后台前,应该把它转换成一个json字符串。用JSON.stringify(returndata)处理下。
  • 打赏
  • 举报
回复
引用 1 楼 datiexiong 的回复:
JavaScript code?12345678910var a ={"s":1,"b":2};var b= {"key":'ab'};var func ="callbackFunName";var arrayTest =[];var arrayNew =[];arrayTest[0]= a;arrayTest[1]= b; arrayNew[0]= func;array……
对比了,发现 如果是“string” eval就可以传递过去,如果是“object” 就无法传递过去。 提示多出了一个“]”。如果是 非string参数无法传递了,不知道有没有解决办法
爱若如梦 2012-12-25
  • 打赏
  • 举报
回复
var a ={"s":1,"b":2};
var b= {"key":'ab'};
var func ="callbackFunName";
var arrayTest =[];
var arrayNew =[];
arrayTest[0]= a;
arrayTest[1]= b; 
arrayNew[0]= func;
arrayNew[1]= arrayTest; 
console.log(arrayNew);
也许不是数组的问题,以上大概模仿你的数组,没有问题

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧