jQuery AJAX请求返回JSON被追加d:null问题求助
解决ASMX AJAX返回JSON末尾追加d:null的问题
咱们先理清ASMX Web服务的默认逻辑:ASP.NET的ASMX服务返回JSON时,会自动把数据包裹在d属性里,这是框架的安全设计,正常返回结构应该是{"d": 你的数据对象},不会出现末尾追加d:null的情况。你遇到的问题大概率是服务端代码或前端处理环节出了问题,咱们一步步排查:
1. 检查服务端Web方法的实现
首先确保你的Web方法配置正确:
- 必须标记
[WebMethod]和[ScriptMethod(ResponseFormat = ResponseFormat.Json)](需要引入System.Web.Script.Services命名空间) - 不要手动拼接JSON字符串,直接返回.NET实体对象,让框架自动完成序列化。示例代码如下:
[WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public YourResourceModel GetbyID(int id) { // 从数据库或其他数据源获取对应数据,直接返回实体对象 return yourDataAccess.GetResourceById(id); }
如果服务端代码里有多余的输出操作(比如Response.Write("d:null")),就会导致返回的JSON被追加无效内容,这时候要删掉这些额外输出。
2. 优化前端AJAX代码
你的前端代码有几个可以调整的点,避免潜在问题:
- 不要手动拼接JSON请求体,用
JSON.stringify()生成更安全可靠 - 检查
success回调的处理逻辑:如果服务端正确返回了对象,data.d已经是解析好的JavaScript对象,不需要再用$.parseJSON()转换
调整后的AJAX代码:
$('#datatable').on("click", ".editButton", function () { $('#myModal').focus(); var id = $(this).data('id'); $.ajax ({ type: "post", contentType: "application/json;charset=utf-8", url: 'GetECWResourceInfo_Json.asmx/GetbyID', data: JSON.stringify({id: id}), dataType: "json", success: function (data) { // 直接使用data.d即可,无需额外解析 var tbDetails = data.d; $.each(tbDetails, function(index, item) { // 这里写你的数据渲染逻辑 }); }, error: function(xhr, status, error) { // 可以在这里打印错误信息,方便排查问题 console.log(xhr.responseText); } }); });
3. 排查原始响应内容
如果还是没解决,打开浏览器开发者工具(F12),在Network标签里找到这个AJAX请求,查看Response的原始内容:
- 如果返回内容是
{"d": {...}}d:null,说明服务端输出了多余内容,要检查服务端代码里的额外输出语句 - 如果返回内容是
{"d": null},说明你的Web方法没有正确获取到数据,要排查数据查询逻辑
内容的提问来源于stack exchange,提问作者user3920526
相关产品推荐
相关产品推荐

