You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery从JSON获取数据时出现TypeError错误求助

解决jQuery遍历JSON数据时的TypeError问题

你遇到的问题是,虽然服务器返回了正确的JSON数据,但在使用$.each遍历时触发了TypeError,错误提示不能用'in'操作符在字符串中搜索'length'。先理清楚关键信息:

  • 错误信息:

jQuery-2.1.4.min.js:2 Uncaught TypeError: Cannot use 'in' operator to search for 'length' in [{"name":"1.xlsx","size":34838},{"name":"485138_1.xlsx","size":34838}] at s (jQuery-2.1.4.min.js:2) at Function.each (jQuery-2.1.4.min.js:2) at Object.success (misupload.js:111) at j (jQuery-2.1.4.min.js:2) at Object.fireWith [as resolveWith] (jQuery-2.1.4.min.js:2) at x (jQuery-2.1.4.min.js:4) at XMLHttpRequest. (jQuery-2.1.4.min.js:4)

  • 你的JS代码:
$.get('/resumes/mis-upload-get-action?_act=bulk', function(data) { 
  $.each(data, function(key,value){ 
    var mockFile = { name: value.name, size: value.size}; 
    thisDropzone.options.addedfile.call(thisDropzone, mockFile); 
    totalFiles += 1; 
    completeFiles += 1; 
  }); 
  $('.btn-proceed .badge').html(totalFiles); 
});
  • 服务器返回的JSON:
[{"name":"1.xlsx","size":34838},{"name":"485138_1.xlsx","size":34838}]

问题原因

核心问题是数据类型不匹配:服务器返回的是JSON格式的字符串,但$.get默认情况下没有自动将这个字符串解析为JavaScript数组/对象。当你直接用$.each遍历这个字符串时,jQuery会把它当成单个字符序列处理,而非你期望的数组,这就导致遍历逻辑出错,触发了TypeError。


解决方案

这里提供两种可靠的解决方法,任选其一即可:

方法1:指定$.get的dataType为'json'

直接在$.get的参数末尾添加'json',让jQuery自动帮你把返回的字符串解析为JSON对象:

$.get('/resumes/mis-upload-get-action?_act=bulk', function(data) { 
  $.each(data, function(key,value){ 
    var mockFile = { name: value.name, size: value.size}; 
    thisDropzone.options.addedfile.call(thisDropzone, mockFile); 
    totalFiles += 1; 
    completeFiles += 1; 
  }); 
  $('.btn-proceed .badge').html(totalFiles); 
}, 'json'); // 手动指定返回数据类型为JSON

方法2:手动解析JSON字符串

如果服务器返回的响应头没有正确设置Content-Type: application/json,你可以用JSON.parse()手动将字符串转为JavaScript对象:

$.get('/resumes/mis-upload-get-action?_act=bulk', function(data) { 
  // 手动解析JSON字符串为数组
  var parsedData = JSON.parse(data);
  $.each(parsedData, function(key,value){ 
    var mockFile = { name: value.name, size: value.size}; 
    thisDropzone.options.addedfile.call(thisDropzone, mockFile); 
    totalFiles += 1; 
    completeFiles += 1; 
  }); 
  $('.btn-proceed .badge').html(totalFiles); 
});

额外建议:你也可以检查服务器端的响应配置,确保返回的Content-Type头是application/json,这样jQuery通常会自动完成解析,无需额外设置。

内容的提问来源于stack exchange,提问作者user9240510

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:43:56