AJAX的dataType问题

本文介绍了一个关于jQuery AJAX请求中的dataType参数大小写敏感的问题。在请求返回JSON数据时,如果dataType设置为JSON而非json,会导致返回的数据被视为字符串而非对象。文章通过实例解释了如何正确设置dataType参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


dataType是预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
"json": 返回 JSON 数据 。
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
"text": 返回纯文本字符串

以上是从W3cSchool上copy过来的,但是我在编码时遇到了一个问题:
1、Controller代码:

/**
 *菜单保存方法
 */
@RequestMapping(value = "save", method = RequestMethod.POST)
public @ResponseBody String createMenu(MenuBean menuBean,
       @RequestParam(value = "imgUpload") MultipartFile uploadFile,
       HttpServletRequest request) throws IOException, BizException {
    String contextPath = request.getSession().getServletContext().getRealPath(Constants.UPLOAD_PATH);
    //返回主键
    return sysMenuService.saveMenu(menuBean, uploadFile, contextPath);
    }

在这段代码中,如果保存成功就返回:

"[{\"retVal\":\"success\"}]"

保存失败就返回:

"[{\"retVal\":\"fail\"}]"

前台ajax代码

$.ajax({
    url: urlPath,
    type: "POST",
    data: postParam,
    dataType: "JSON",
    error: function (data) {
        $.Popup.error("表单数据不合法!");
    },
    success: function (data) {
        ......
    }
});

当我debugger时,发现typeof(data)返回的是string而不是object,为什么呢?经过调查发现是因为dataType不应该是“JSON”而是“json”,将大写改成小写后,返回的data的类型就是object类型了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值