jquery封装的ajax方法为什么没有添加dom成功……

jquery封装的ajax方法为什么没有添加dom成功……

而且老师在视频中的控制台报错了也可以输出,我报了同样的错误但是无法输出,这是为什么?

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>ajax</title>

<link rel="stylesheet" type="text/css" href="css/style.css" />

</head>

<body>

<div class="banner" id="banner"></div>

<div class="banner" id="banner_jq"></div>

<script type="text/javascript" src="js/jquery-1.7.1.js"></script>

<script type="text/javascript">

//封装通用的xhr对象(即XMLHttpRequest对象)

//目的是兼容各个版本浏览器

function createXHR(){

//判断浏览器是否将XMLHttpRequest作为本地对象实现,针对IE7,firefox、opera等

if(typeof XMLHttpRequest != "undefined"){

return new XMLHttpRequest();

}else if(typeof ActiveXObject != "undefined"){

//将所有可能出现的ActiveXObject版本放在一个数组中

var xhrArr = ['Microsoft.XMLHTTP','MSXML2.XMLHTTP.6.0','MSXML.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP.2.0'];   

//遍历创建XMLHttpRequest对象

var len = xhrArr.length,xhr;

for(var i=0;i<len;i++){

try{

//创建XMLHttpRequest对象

xhr = new ActiveXObject(xhrArr[i]);

break;

}

catch(ex){

}

}

return xhr;

}else{

throw new Error('NO XHR object availabel.')

}

}

//第一步:XMLHttpRequest对象

var xhr = createXHR(),data = null;

console.log(xhr);

//第三步(一般写在第二步上面):设置响应XMLHttpRequest对象状态变化的函数

//onreadystatechange在readystatechange属性发生改变时触发。是用来监控整个readystatechange属性的。

xhr.onreadystatechange = function(){

//异步调用成功,响应内容解析完成,可以在客户端调用

//0表示还没有初始化(还没有调用send方法),1表示已经调用send方法,正在发送请求,2表示send方法已经执行完成,3表示正在解析响应的内容,4表示异步调用成功,

if(xhr.readyState === 4){

//status大于等于200且小于300表示异步调用成功,

//304表示请求资源没有被修改,可以使用浏览器的缓存(304表示之前请求成功过,并且这次请求的资源距离上次请求没有发生过改变)

if((xhr.status >=200 && xhr.status<300) || xhr.status ===304){

//向服务器发送了一个请求,服务器返回的数据存放在slider.json这个文件下。就可以获得服务器返回的数据。

//第五步:获得服务器返回的数据。

//data = eval("("+xhr.responseText+")");

//50行代码也可以写成如下形式:

data = JSON.parse(xhr.responseText);

//这是把JSON对象转成JS字符串:

//data = JSON.stringify(xhr.responseText);  //undefined

console.log(data.slider);

//最后一步:渲染数据到页面中。

renderDataToDom();

}

}

}

//第二步:创建请求

xhr.open("get","./server/slider.json",true);

//第四步:发送HTTP请求

xhr.send(null);   //不需要传参

//xhr.send({user:"zhangsan",id:6});  //需要传参

//设置http头部信息

//xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");

//渲染数据

function renderDataToDom(){

var img = data.slider,i,

len = img.length,str = "";

for(i=0;i<len;i++){

console.log(img[i]);

str += '<a href="'+img[i].linkUrl+'"><img src="'+img[i].picUrl+'"></a>';

}

console.log(str);

banner.innerHTML = str;

}

//jquery的$.ajax()方法,把所有的参数写在大括号当中

$.ajax({

url:"./server/slider.json",  //请求地址

type:"post",                 //请求方法

async:true,                  //异步同步

dataType:"json",             //从服务器返回的数据格式

success:function(imgData){   //当请求成功之后的回调函数

jQrenderDataToDom(imgData);

//console.log(imgData);    //imgData相当于xhr.responseText获取到的数据

}

})

//渲染数据

function jQrenderDataToDom(data){

var str = "";

$.each(data,function(index,obj){

//console.log(obj);

str += '<a href="'+obj.linkUrl+'"><img src="'+obj.picUrl+'"></a>';

})

$("#banner_jq").html(str);

}

</script>

</body>

</html>




*{

margin: 0;

padding: 0;

}

.banner{

width: 600px;

height: 338px;

overflow: hidden;

position: relative;

margin: 50px auto;

}

.banner a{

display: block;

float: left;

width: 600px;

height: 338px;

}

.banner a img{

display: block;

width: 600px;

height: 338px;

}

其他文件都是资料中下载的源码,slider.json以及jquery.js

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕星星 2019-06-17 16:31:21

你好,是因为传入的数据不对:

http://img1.sycdn.imooc.com//climg/5d074f5c0001233e06340282.jpg

从json文件中获取的数据包括code属性,而页面中只需要slider属性中的数据,所以传入的数据之后slider即可。

报错是因为json文件中picUrl图片名称后缀名与img文件夹中不一致:

http://img1.sycdn.imooc.com//climg/5d074fcf00016fa308590318.jpg

改成一致的即可。

自己重新测试下,祝学习愉快!

  • 提问者 hyperse #1
    老师,我按照您说的改了这两处错误,但还是没有添加dom,而且说Uncaught ReferenceError: $ is not defined at index.html?__hbt=1560763383527:87 就是$.ajax()这个的doller符号,这是为什么。。
    2019-06-17 17:25:51
  • 好帮手慕星星 回复 提问者 hyperse #2
    这是报错$未定义,是不是jquery.js文件没有引入成功呢,可以看一下路径哦。
    2019-06-17 18:01:22
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师