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

jQuery新手求助:如何从AJAX返回的JSON中获取键值对

问题分析与解决方案

看起来你遇到的问题根源出在后端返回的JSON格式和前端预期不匹配上,我们一步步来拆解:

问题所在

你的VB后端代码里,直接序列化并返回了单个数值:

Return JsonConvert.SerializeObject(FacilityRatesBE.MinNbrOfHours)

这意味着后端返回的JSON是类似"12"或者12这样的单个值,而不是一个包含MinNbrOfHours键的对象(比如{"MinNbrOfHours":12})。

但在前端的success回调里,你试图把返回值当作对象来访问属性:

var obj = response.d;
alert('Field: ' + obj.MinNbrOfHours);

这里的obj其实就是那个单个数值,自然没有MinNbrOfHours这个属性,所以你拿不到想要的值。

两种解决方案

方案1:修改后端,返回带键的对象(推荐)

把后端的返回逻辑改成返回一个包含目标属性的匿名对象,这样序列化后就是符合前端预期的键值对JSON:

<System.Web.Services.WebMethod()>
<ScriptMethod(UseHttpGet:=True, ResponseFormat:=ResponseFormat.Json)>
Public Shared Function GetMinimumDaysInAdvance(ByVal intOrganizationKey As Int32, ByVal intFacilitySpaceKey As Integer) As Object
    Dim FacilityRatesBE As New FacilityRatesBE
    Dim FacilityRatesDAL As New FacilityDAL
    FacilityRatesBE = FacilityRatesDAL.GetFacilityRatesByFacilityKey(intOrganizationKey, intFacilitySpaceKey)
    ' 返回包含属性的匿名对象,而非单个数值
    Return New With { .MinNbrOfHours = FacilityRatesBE.MinNbrOfHours }
End Function

这样后端返回的JSON会是{"MinNbrOfHours":X},前端原有的obj.MinNbrOfHours就能正常获取到值了,同时你也可以保留原来的赋值逻辑:

$("#hdnMinimumDaysInAdvance").val(obj.MinNbrOfHours);

方案2:修改前端,直接使用返回的数值

如果不想改动后端,那直接使用obj本身即可,因为它就是你要的MinNbrOfHours的值:

success: function (response) {
    var minHours = response.d;
    alert('Field: ' + minHours);
    $("#hdnMinimumDaysInAdvance").val(minHours);
},

调试小技巧

以后遇到类似的JSON解析问题,可以在success回调里先打印返回值看看实际结构:

console.log(response.d);

通过浏览器的开发者工具查看控制台输出,就能直观看到返回的是单个值还是对象,快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:05:03