关于js ajax json的问题 求助大神

其实就是个post php返回json数组
因为用到的地方比较多,我就写了个函数

比如说:
function a (b,c){
post.send(b,c,'post','json');

……
return eval("("+data+")"); //data是返回的数据
}

var d = a(e.php , actime=f');

结果报错:TypeError: d is null

不管怎样输出都报错,这是个数组 d[0] 也报错
但是直接把函数里的return eval("("+data+")") 改成 return "123" 又是正常的
我也直接试过请求代码,确实能取到数据,
本人小白,求教各位大神,问题出在哪?该怎么解决?

本人小白,有代码才能摸得懂

5个回答

ajax请求数据,默认是异步的,改成同步的试试

出了错一步一步找,
首先出错是d is null 既然d is null 就不是array或者object 所以你使用d[0]肯定也是错误的

既然d is null 那就看d这个函数
d的返回值就是来之eval(‘(’+data+’)‘) ,所以问题可能是eval(‘(’+data+’)‘) === null

你说的如果是return ‘123’就是正常的 就更加证明了上面说的eval(‘(’+data+’)‘) === null
那么在考虑eval(‘(’+data+’)‘)为什么就是null eval就是一个执行脚本
你可以试着在程序里面打断点调试看看data的值是多少
然后data值可能就是一个null,至于data你怎么做的代码看不见你可以查一下data值的来源 为什么等于null
至于为什么可能的原因就是说到ajax的异步,异步执行的请求,可能还没有返回data值,导致data等于初始的null
问题可能出在异步请求这里

如果是异步问题,修改方式不建议使用同步,尽量使用回调函数

这个原因是ajax是异步的请求,return eval("("+data+")")中的data并不是你ajax返回的data,而是一个未定义的变量

return应该写在ajax的成功回调函数里吧..写在外面会因为异步问题得不到返回值data

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐