jQuery ajax请求json数据回调函数中data为undefined解决方法

本文详细分析了在IE9下使用jQuery的$.ajax进行JSON数据请求时,回调函数中data参数可能出现undefined的问题。问题关键在于dataType设置和PHP响应头的Content-Type设置。解决方案是确保dataType设为'json',同时PHP响应头的Content-Type应为'application/json',不包含charset=utf8。

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

本文主要讨论IE9下使用$.ajax获取json数据时可能遇到的回调函数中data为undefined的问题。
问题的前提是:

  • 数据成功返回
  • 回调函数成功执行

如果不是这样,你可能就要考虑json数据是否正确,dataType类型和返回类型是否一致,下面的内容也就不用看了。

问题描述

js数据请求代码:

$("#btn1").on("click",function(){
        $.ajax({
            type: "GET",
            url: "php/runton_lastMember.php",
            dataType: "json",
            success: function(data){
                console.log("data = "+data);
                var userData = eval(data);
                if (userData.length > 0){
                    var htmlText = "";
                    for (var i = 0; i < userData.length; i++) {
                        htmlText += "<li><a href='#' title='" + userData[i].username + "'>";
                        htmlText += "<img src='" + userData[i].user_pic + "' alt=''/></a></li>";
                    }
                    $("#content").empty().append(htmlText);
                }
            },
            error:function(data){
                console.log("失败");
            }
        });
    });

我们知道IE9是支持$.ajax异步请求数据的。这段请求代码中我要获取经过runton_lastMember.php脚本处理后返回的json数据。再将返回的数据插入到页面中显示出来。

紧接着我们来看看runton_lastMember.php脚本文件中的代码:

<?php
    header("Content-Type:application/json;charset=utf8");
    require_once('runton_fns.php');

    $conn = db_connect(); //连接数据库
    $sql = "SET NAMES UTF8";

    $conn->query($sql);

    //从user表中获取最近的8个用户信息
    $sql ="select * from users order by user_id desc limit 0,8";
    $result = $conn->query($sql);

    $arr =array();
    //检查执行返回结果是否为空
    if($result&&$conn->affected_rows){
        while($row = $result->fetch_assoc()){
            $arr[] =$row;
        };
        echo json_encode($arr); //返回json数据
    }else{
        echo '[]';
    }

看过请求代码和php脚本,貌似应该不会有问题的。经过在各浏览器中的测试发现:
Chrome、Firefox、360浏览器等浏览器中可以正常获得数据,但是在IE9中,出现如下结果:
这里写图片描述

我们再看看响应头:
这里写图片描述

看过请求响应后,我百思不得其解。为什么响应成功了.ajaxdatajsonjson.ajax请求json文件获取数据看看:

$("#btn2").on("click",function(){
        $.ajax({
            type: "GET",
            url: "demo.json",
            dataType: "json",
            success: function(data){
                var userData = eval(data);
                if (userData.length > 0){
                    var htmlText = "";

                    for (var i = 0; i < userData.length; i++) {
                        htmlText += "<li><a href='#' title='" + userData[i].username + "'>";
                        htmlText += "<img src='" + userData[i].user_pic + "' alt=''/></a></li>";
                    }
                    $("#content").empty().append(htmlText);
                }
            },
            error:function(data){
                console.log("失败");
            }
        });
    });

经过测试发现可以访问到demo.json中的数据。看看请求json文件的响应头:
这里写图片描述

经过对比发现区别就在响应头中Content-Type的值上,之前php脚本中将响应头设置为:

Content-Type:application/json;charset=utf8;

问题就出在这,IE9下$.ajax获取json数据,dataType需要设置为”json”,同时php脚本响应头Content-Type也要设置为响应的类型application/json,并且要单独设置不要包含charset=utf8。

同样我们在请求XML数据时,也可能遇到这种情况,因此在脚本中最好也要这样设置响应头。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值