为何使用jQuery的回调函数无法获取数据?
解决AJAX回调无法获取数据的问题
看起来你Postman测试接口完全正常,但AJAX回调就是拿不到数据,主要是代码里有几个容易忽略的小问题,我帮你一一排查并修正:
问题1:AJAX请求的参数配置错误
你的AJAX请求里,data: "data"这一行是无效的——如果GET请求不需要传递参数,直接删掉这个字段就行;如果需要传参,应该写成键值对格式(比如data: { id: 123 })。另外,GET请求通常不需要设置contentType,因为GET参数是拼接在URL上的,而非放在请求体里。
问题2:$.each遍历语法错误
你在回调里写的$.each(function (data) { ... })完全不符合语法规范,$.each的正确用法是第一个参数是要遍历的数组/对象,第二个参数是遍历回调(包含索引和当前项)。你现在没有传入要遍历的接口返回数据data,所以遍历逻辑根本没执行。
问题3:未声明变量的潜在问题
你在遍历里用的selected变量没有提前声明,会自动变成全局变量,这是不好的编程习惯,建议用let或者var明确声明。
修正后的完整代码
// 修正后的AJAX请求函数 function GetSelected() { $.ajax({ type: 'GET', url: '/api/machine/', dataType: "JSON", // 去掉无效的data和contentType(GET请求不需要) success: backcall }); }; // 修正后的回调函数 function backcall(data) { // 统一变量名大小写,避免混淆;转成数字再做加法,防止字符串拼接错误 let selectmachine = $("#selectmachine").val(); let selectMachineNum = parseInt(selectmachine) + 1; alert('接口已返回数据!'); // 正确的$.each用法:传入要遍历的data,回调里获取当前项 $.each(data, function(index, item) { if (item.machinenumber === 3) { let selected = item.selected; alert('匹配到的selected值:' + selected); } }); };
额外说明
- 如果你的GET接口需要传递参数,比如根据ID查询,把
data改成data: { someKey: someValue }即可,jQuery会自动帮你拼接到URL上。 - 一定要把
selectmachine转成数字再做加法,不然字符串拼接会得到类似"2"+1="21"的错误结果。 - 现在回调里的
$.each会正确遍历接口返回的数组,当找到machinenumber为3的项时,就能正常弹出对应的selected值了。
内容的提问来源于stack exchange,提问作者Peter Gade Carstensen
相关产品推荐
相关产品推荐

