如何在jQuery中访问返回为JSON的Dictionary<string, string>数据?
解决Ajax返回JSON对象的访问问题
嘿,我来帮你搞定这个问题!你遇到的Uncaught SyntaxError: Unexpected token o错误,根源很简单:jQuery的$.post方法已经自动帮你把服务器返回的JSON字符串解析成JavaScript对象了,你不需要再手动调用JSON.parse()去解析它!
当你打印returnedData到控制台时,看到的[object Object]就是最好的证明——它已经是一个可直接操作的对象,不是JSON字符串。这时候再强行用JSON.parse()去解析对象,自然会抛出语法错误。
修正后的代码示例
直接使用返回的对象,然后遍历键值对检查第二个字段即可:
$.post(baseUrl + '/de/SAM/GenerateLicensePlateSeries', { letters: $("#seriesLetters").val(), number: $("#seriesNumbers").val(), amount: $("#seriesAmount").val() }, function (returnedData) { // 直接使用returnedData,无需JSON.parse console.log(returnedData); // 现在能看到完整的键值对结构 // 方式1:用for...in循环遍历每个车牌 for (const plateNum in returnedData) { // 确保遍历的是对象自身的属性(避免原型链上的属性) if (returnedData.hasOwnProperty(plateNum)) { const commissionNum = returnedData[plateNum]; if (commissionNum) { console.log(`车牌 ${plateNum} 已被占用,对应编号:${commissionNum}`); // 这里可以添加你需要的业务逻辑,比如标记已占用的车牌 } else { console.log(`车牌 ${plateNum} 可用`); } } } // 方式2:用Object.entries更直观地获取键值对(ES6+支持) Object.entries(returnedData).forEach(([plateNum, commissionNum]) => { if (commissionNum) { console.log(`车牌 ${plateNum} 已被占用,对应编号:${commissionNum}`); } else { console.log(`车牌 ${plateNum} 可用`); } }); });
额外优化建议
你还可以显式告诉jQuery你期望返回JSON类型,在$.post的末尾添加'json'参数,这样即使服务器返回的响应头没正确设置,jQuery也会自动解析:
$.post( baseUrl + '/de/SAM/GenerateLicensePlateSeries', { letters: $("#seriesLetters").val(), number: $("#seriesNumbers").val(), amount: $("#seriesAmount").val() }, function (returnedData) { // 处理逻辑不变 }, 'json' // 指定返回数据类型为JSON );
内容的提问来源于stack exchange,提问作者d00d
相关产品推荐
相关产品推荐

