jQuery $.get成功回调函数失效问题求助
问题排查与解决
你的本地API请求(/../../_public/api/news.php)在Network面板显示返回数据,但代码中无法获取结果,核心原因大概率是响应解析失败或缺少错误处理,以下是具体排查步骤:
1. 添加错误处理,定位问题
你的代码只处理了请求成功的情况,未捕获解析失败或其他异常。修改代码加入错误回调,直接查看出错信息:
const url='/../../_public/api/news.php'; let getHandle = () => { return new Promise(function (resolve, reject){ $.get(url, {endpoint: 'titles', param: 'titles'}) .done((response) => { console.log('响应数据:', response); resolve(response); }) .fail((jqXHR, textStatus, errorThrown) => { console.error('请求错误类型:', textStatus); console.error('错误详情:', errorThrown); console.error('原始响应内容:', jqXHR.responseText); // 打印返回的原始文本 reject(errorThrown); }) }) } getHandle().then((res) => { console.log(res); }).catch(err => { console.error('Promise捕获的错误:', err); })
运行后查看控制台,重点关注原始响应内容是否与Network面板一致,以及错误类型(比如parsererror说明JSON解析失败)。
2. 检查API响应的Content-Type和数据格式
- 设置正确的Content-Type头:确保PHP接口返回时指定MIME类型,在
news.php开头添加:
若未设置,jQuery可能无法正确识别响应格式,导致解析失败。header('Content-Type: application/json'); - 验证JSON合法性:将Network面板中API返回的内容复制到本地JSON校验工具(无需外链),检查是否存在语法错误(比如逗号结尾、引号不匹配等)。
3. 强制获取原始文本,确认数据内容
若怀疑是解析问题,改用$.ajax并设置dataType: 'text',直接获取原始响应文本,跳过jQuery的自动解析:
let getHandle = () => { return new Promise(function (resolve, reject){ $.ajax({ url: url, data: {endpoint: 'titles', param: 'titles'}, dataType: 'text', // 强制返回文本 success: (response) => { console.log('原始响应文本:', response); // 手动尝试解析JSON try { let data = JSON.parse(response); console.log('解析后的JSON:', data); resolve(data); } catch (e) { console.error('手动解析JSON失败:', e); reject(e); } }, error: (jqXHR, textStatus, errorThrown) => { console.error('请求出错:', textStatus, errorThrown); reject(errorThrown); } }) }) }
通过这一步可以明确是响应内容本身存在问题,还是jQuery的自动解析逻辑导致无法获取数据。
内容的提问来源于stack exchange,提问作者TheTrueJACKSONIAN
相关产品推荐
相关产品推荐

