博客列表 >【jQuery基础入门】jQuery中常用Dom操作总结及Ajax异步请求和jsonp跨域实现原理详解

【jQuery基础入门】jQuery中常用Dom操作总结及Ajax异步请求和jsonp跨域实现原理详解

 一纸荒凉* Armani
 一纸荒凉* Armani原创
2021年04月15日 17:04:441505浏览

jQuery中的选择器

一、基本选择器

基本选择器是jQuery中最常用也是最简单的选择器,它通过元素的id、class和标签名等来查找DOM元素。

1、ID选择器 #id
描述:根据给定的id匹配一个元素, 返回单个元素
示例:$("#test") 选取 id 为 test 的元素

  1. <input type="button" value="显示效果" id="btn">
  2. <div id="box"></div>
  3. <style>
  4. #box{
  5. width: 300px;
  6. height: 300px;
  7. background-color: pink;
  8. }
  9. </style>
  10. <script>
  11. $(function(){
  12. // 获取按钮--调用点击事件方法
  13. $('#btn').click(()=>{
  14. // 设置div显示内容
  15. $('#box').text('这是一个pink'); // 相当于DOM中的innerText或textContent
  16. // 设置背景颜色
  17. $('#box').css('backgroundColor','yellow');
  18. })
  19. })
  20. </script>

2、类选择器 .class

描述:根据给定的类名匹配元素,返回元素集合
示例:$(".test") 选取所有class为test的元素

  1. <input type="button" value="显示效果" id="btn">
  2. <p class="cls">这是段文字</p>
  3. <span class="cls">我是一个span</span>
  4. <style>
  5. .cls{
  6. font-size: 32px;
  7. }
  8. </style>
  9. <script>
  10. $(function(){
  11. // 获取按钮--调用点击事件方法
  12. $('#btn').click(()=>{
  13. $('.cls').toggleClass('cls');
  14. })
  15. })
  16. </script>

3、标签选择器 element
描述:根据给定的元素名匹配元素,返回元素集合
示例:$("p") 选取所有的<p>元素

  1. <input type="button" value="显示效果" id="btn">
  2. <p>第一段文字</p>
  3. <p>第二段文字</p>
  4. <p>第三段文字</p>
  5. <p>第四段文字</p>
  6. <script>
  7. $(function(){
  8. // 获取按钮--调用点击事件方法
  9. $('#btn').click(()=>{
  10. // 获取所有的p标签,无需循环遍历,即可统一设置
  11. $('p').text('统一修改的');
  12. })
  13. })
  14. </script>

4、标签+类选择器 $(li.cls)
描述:将根据类名选择此类的标签元素
示例:$(li.cls) 选取li中类名为cls的元素

5、多条件选择器 $(span,li,div,p)
描述:将每个选择器匹配到的元素合并后一起返回,返回合并后的元素集合
示例:$("p,span,p.myClass") 选取所有<p>,<span>和class为myClass的<p>标签的元素集合

6、通配符选择器
描述:匹配所有元素,返回元素集合
示例:`$(“
“)` 选取所有的元素

二、层次选择器

层次选择器根据层次关系获取特定元素。

1、后代选择器
示例:$("p span") 选取<p>元素里的所有的<span>元素
(注:后代选择器选择父元素所有指定选择的元素,不管是儿子级,还是孙子级)

2、子代选择器 $(“parent>child”)
示例:$("p>span") 选择<p>元素下的所有<span>元素
(注:子选择器只选择直属于父元素的子元素)

3、相邻选择器 $(“prev+next”)
描述:选取紧接在prev元素后的next元素,返回元素集合
示例:$(".one+p") 选取class为one的下一个<p>同辈元素集合

4、同辈选择器 $(“prev~siblings”)
描述:选取prev元素后的所有siblings元素,返回元素集合
示例:$("#two~p")选取id为two的元素后所有<p>同辈元素集合

三、过滤选择器

1>奇偶过滤选择器

1、 :even (偶数选择器)
描述:选取索引是偶数的所有元素,索引从0开始,返回元素集合
示例:$(“li:even”) 选取所有<li>元素中第偶数个<li>元素

2、 :odd (奇数选择器)
描述:选取索引是奇数的所有元素,索引从0开始,返回元素集合
示例:$(“li:odd”) 选取所有<li>元素中第奇数个<li>元素

案例:隔行变色

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>案例:隔行变色</title>
  6. <style>
  7. ul{
  8. list-style-type: none;
  9. width: 200px;
  10. position: absolute;
  11. left: 500px;
  12. }
  13. ul li{
  14. margin-top: 10px;
  15. cursor: pointer;
  16. text-align: center;
  17. font-size: 20px;
  18. }
  19. </style>
  20. <script src="jquery-1.12.2.js"></script>
  21. <script>
  22. $(function () {
  23. $("#btn").click(function () {
  24. //偶数的li
  25. $("#uu>li:even").css("backgroundColor","yellow");//偶数的li
  26. $("#uu>li:odd").css("backgroundColor","red");//奇数的li
  27. });
  28. });
  29. </script>
  30. </head>
  31. <body>
  32. <input type="button" value="隔行变色" id="btn"/>
  33. <ul id="uu">
  34. <li>乔峰:降龙十八摸</li>
  35. <li>张无忌:乾坤大摸姨</li>
  36. <li>段誉:鳞波微步</li>
  37. <li>丁棚:天外流星贱</li>
  38. <li>张三丰:太极掌</li>
  39. <li>段飞:极乐神功</li>
  40. <li>云飞扬:天馋功</li>
  41. <li>杨过:黯然销魂掌</li>
  42. <li>那谁谁:如来神掌</li>
  43. <li>孟星魂:流星蝴蝶剑</li>
  44. <li>楠哥:少女萌萌拳</li>
  45. </ul>
  46. </body>
  47. </html>

2>索引过滤选择器

1、 :first (选择第一个)
描述:选取第一个元素,返回单个元素
示例:$(“p:first”) 选取所有<p>元素中第一个<p>元素

2、 :last (选择最后一个)
描述:选取最后一个元素,返回单个元素
示例:$(“p:last”) 选取所有<p>元素中最后一个<p>元素

3、 :eq(index) 索引 等于
描述:选取索引等于index的元素,索引从0开始,返回单个元素
示例:$(“li:eq(3)”) 选取所有<li>元素中第4个<li>元素

4、 :gt(index) 索引 大于
描述:选取索引大于index的元素,索引从0开始,返回元素集合
示例:$(“li:gt(2)”) 选取所有<li>元素中第3个以后的所有<li>元素

5、 :lt(index) 索引 小于
描述:选取索引小于于index的元素,索引从0开始,返回元素集合
示例:$(“li:lt(2)”) 选取所有<li>元素中前两个<li>元素

6、 :not(selector) 排除
描述:去除所有与给定选择器匹配的元素,返回元素集合
示例:$(“input:not(.myClass)”) 选取class不是myClass的<input>元素

7、 :focus 焦点
描述:选取当前获取焦点的元素
示例:$(“input:focus”) 选取当前获得焦点的<input>元素

3>内容过滤选择器

1、:contains(text)
描述:选取含有文本内容为text的元素,返回元素集合
示例:$(“p:contains(‘我’)”) 选取含有文本“我”的元素

2、:empty
描述:选取不包含子元素或者文本元素的空元素,返回元素集合
示例:$(“p:empty”) 选取不包含子元素或者文本元素的空<p>元素(<p></p>

3、:has(selector)
描述:选取含有选择器所匹配的元素的元素,返回元素集合
示例:$(“p:has(span)”) 选取含有<span>元素的<p>元素(<p><span></span></p>

4、:parent
描述:选取含有子元素或者文本的元素,返回元素集合
示例:$(“p:parent”) 选取含有子元素或者文本元素的<p>元素(<p><p>或者</p>文本</p>

4>可见性过滤选择器

1、:hidden
描述:选取所有不可见的元素,返回元素集合

2、:visible
描述:选取所有可见的元素,返回元素集合

5>属性过滤选择器(返回元素集合)

1、[attribute]
示例:$(“p[id]”) 选取拥有id属性的p元素

  1. $("input[name=text]") // 选取拥有name属性等于text的input元素
  2. $("input[name!=text]") // 选取拥有name属性不等于text的input元素
  3. $("input[name^=text]") // 选取拥有name属性以text开始的input元素
  4. $("input[name$=text]") // 选取拥有name属性以text结束的input元素
  5. $("input[name*=text]") // 选取拥有name属性含有text的input元素
  6. $("input[class~=text]") // 选取拥有class属性以空格分割的值中含有text的input元素

6>表单对象属性过滤选择器(返回元素集合)

1、:enabled
描述:选取所有可用元素

2、:disabled
描述:选取所有不可用元素

3、:checked
描述:选取所有被选中的元素(单选框,复选框)
示例:$(“input:checked”) 选取所有被选中的<input>元素

4、:selected
描述:选取所有被选中的选项元素(下拉列表)
示例:$(“select option:selected”) 选取所有被选中的选项元素

四、表单选择器

1、:text
描述:选择所有的单行文本框
示例:$(“:text”)选取所有的单行文本框

2、:password
描述:选择所有的密码框

3、:button
描述:选择所有的按钮

4、:checkbox
描述:选择所有的多选框


jQuery链式编程

链式语法的核心:

​ a)调用时,方法用完毕之后继续使用点语法调用别的方法

​ b)在每一个方法内部返回this

​ jQuery几乎所有方法都支持链式语法。

$("li").parent("ul").parent("div").siblings("div").children("div").html("内容");

  1. // 设置操作
  2. $("div").css("color", "red");
  3. // 获取操作
  4. $("div").css("color"); // 返回第一个元素的值
  5. //隐式迭代的意思是:在方法的内部会为匹配到的所有元素进行循环遍历,执行相应的方法;
  6. //而不用我们再进行循环,简化我们的操作,方便我们调用。如果获取的是多元素的值,返回的是第一个元素的值。

jQuery动画效果

jQuery节点操作

js原生 获取元素(父节点,子节点,兄弟节点)

  1. var test = document.getElementById("test");
  2. var parent = test.parentNode; // 父节点
  3. var chils = test.childNodes; // 全部子节点
  4. var first = test.firstChild; // 第一个子节点
  5. var last = test.lastChile; // 最后一个子节点 
  6. var previous = test.previousSibling; // 上一个兄弟节点
  7. var next = test.nextSibling; // 下一个兄弟节点

jQuery 获取元素(父节点,子节点,兄弟节点)

  1. $("#test1").parent(); // 父节点
  2. $("#test1").parents(); // 全部父节点
  3. $("#test1").parents(".mui-content");
  4. $("#test").children(); // 全部子节点
  5. $("#test").children("#test1");
  6. $("#test").contents(); // 返回 #test里面的所有内容,包括节点和文本
  7. $("#test").contents("#test1");
  8. $("#test1").prev(); // 上一个兄弟节点
  9. $("#test1").prevAll(); // 之前所有兄弟节点
  10. $("#test1").next(); // 下一个兄弟节点
  11. $("#test1").nextAll(); // 之后所有兄弟节点
  12. $("#test1").siblings(); // 所有兄弟节点
  13. $("#test1").siblings("#test2");
  14. $("#test").find("#test1"); // 查找子节点

jQuery 元素筛选

  1. // 以下方法都返回一个新的jQuery对象,他们包含筛选到的元素
  2. $("ul li").eq(1); // 选取ul li中匹配的索引顺序为1的元素(也就是第2个li元素)
  3. $("ul li").first(); // 选取ul li中匹配的第一个元素
  4. $("ul li").last(); // 选取ul li中匹配的最后一个元素
  5. $("ul li").slice(1, 4); // 选取第2 ~ 4个元素
  6. $("ul li").filter(":even"); // 选取ul li中所有奇数顺序的元素

jQuery 创建节点

  1. 向父元素最后追加

append() 在父元素上调用(主动添加在末尾)
语法:父元素jQuery对象.append(新创建的jQuery对象);

appendTo() 在子元素上调用(被动添加在末尾)
语法:新创建jQuery对象.appendTo(父元素jQuery对象);

主动:$(‘body’).append(“<p></p>“);
被动: $(‘<p></p>‘).appendTo(“body”);

  1. 向父元素最前面追加

prepend() 在父元素上调用(主动添加在开头)
语法:父元素jQuery对象.prepend(新创建的jQuery对象);

prependTo() 在子元素上调用(被动添加在开头)
语法:新创建jQuery对象.prependTo(父元素jQuery对象);

  1. 向元素后面追加新的兄弟

after 当前元素后面 (主动添加)
语法:jQuery对象.after(新创建的jQuery对象);

insterAfter() 当前元素后面(被动添加)
语法:新创建jQuery对象.insertAfter(jQuery对象);

  1. 向元素前面追加新的兄弟

before 当前元素前面 (主动添加)
语法:jQuery对象.before(新创建的jQuery对象);

insterBefore() 当前元素前面 (被动添加)
语法:新创建jQuery对象.insertBefore(jQuery对象);

  1. <ul>
  2. <li>item2</li>
  3. <li>item3</li>
  4. <li>item4</li>
  5. <li>item5</li>
  6. <li>item6</li>
  7. </ul>
  1. // 向父元素最后添加新的子元素
  2. $('ul').append("<li>item7</li>").find("li").last().css('color', 'pink');
  3. $("<li>item8</li>").appendTo('ul').css('color', 'red');
  4. // 向父元素的最前面添加子元素
  5. $('ul').prepend("<li>item1</li>").find("li").first().css('color', 'pink');
  6. $("<li>item0</li>").prependTo("ul").css('color', 'red');
  7. // 向一个元素的后面添加一个新的兄弟元素
  8. $("ul>li:first").after("<li>这是新的li 标签</li>");
  9. $("<li>这是新的li 标签</li>").insertAfter("ul>li:last").css("color", "green");
  10. //向一个元素的前面添加一个新的兄弟元素
  11. $('ul').before("<h1>列表标题</h1>");
  12. $("<h3>副标题</h3>").insertBefore("ul");
  13. //向一个元素的后面添加一个新的兄弟元素
  14. $('ul').after("<footer>主动在后面添加兄弟元素</footer>");
  15. $("<footer>被动在后面添加兄弟元素</footer>").insertAfter("ul");

jQuery 替换节点

replaceWith() 替换选中的所有元素 (主动替换)
replaceAll() 替换选中的所有元素 (被动替换)

  1. $("ul li:eq(6)").replaceWith("<h1>已经被替换</h1>");
  2. $("<h1>已经被替换</h1>").replaceAll("ul li:eq(7)");

jQuery 删除节点

remove() 删除选中元素 (删除谁就让谁调用这个方法)
empty() 删除节点中所有子节点 (清空元素内部的所有子节点)

jQuery 复制节点

clone() 复制选中节点
语法:jQuery对象.clone(布尔值); 返回克隆好的元素
参数:默认是false,表示仅仅克隆内容。 true,克隆内容和事件

  1. // var $newBox = $(".box").clone(false); //只克隆内容,不克隆事件
  2. var $newBox = $(".box").clone(true); //克隆内容,克隆事件
  3. // // 添加到 body 最后
  4. $("body").append($newBox);

jQuery事件操作

jquery提供了许多的事件处理函数

一、鼠标事件

  1. click():鼠标单击事件
  1. $("div").click(function (event) {
  2. $(this).css({
  3. "background": "blue",
  4. });
  5. console.log(event);
  6. })
  1. dblclick():鼠标双击事件
  1. $("div").dblclick()(function (event) {
  2. $(this).css({
  3. "background": "blue",
  4. });
  5. })
  1. 鼠标进入和离开(进入子元素也触发)
  • mouseover():进入
  • mouseout():离开
  1. $div = $("div")
  2. $div.mouseover(function (event) {
  3. $(this).css({
  4. "background": "blue",
  5. });
  6. })
  7. $div.mouseout(function (event) {
  8. $(this).css({
  9. "background": "blue",
  10. });
  11. })
  1. 鼠标进入和离开(进入子元素不触发)
  • mouseenter() 鼠标进入
  • mouseleave() 鼠标离开
  1. $div = $("div")
  2. $div.mouseenter(function (event) {
  3. $(this).css({
  4. "background": "blue",
  5. });
  6. })
  7. $div.mouseleave(function (event) {
  8. $(this).css({
  9. "background": "blue",
  10. });
  11. })
  1. hover():同时为mouseenter和mouseleave事件指定处理函数
  1. $div = $("div")
  2. // 鼠标进入和移出事件
  3. $div.hover(function (event) {
  4. $div.css({
  5. "background": "blue",
  6. })
  7. },function (event) {
  8. $div.css({
  9. "background": "red",
  10. });
  11. })
  1. 鼠标按下和松开
  • mouseup() 松开鼠标
  • mousedown() 按下鼠标
  1. $div = $("div")
  2. $div.mousedown(function (event) {
  3. $(this).css({
  4. "background": "blue",
  5. });
  6. console.log(event);
  7. })
  8. $div.mouseup(function (event) {
  9. $(this).css({
  10. "background": "blue",
  11. });
  12. console.log(event);
  13. })
  1. mousemove() 鼠标在元素内部移动

二、键盘事件

  1. keypress():按下键盘(指的是按下)
  1. $(window).keypress(function (event) {
  2. $div.css({
  3. "background": "blue",
  4. });
  5. // 判断按下了那个按键
  6. console.log(event.which);
  7. })

注意:如果按下不放开,事件会连续触发。

  1. keydown() keyup() 按下和松开键盘
  1. $(window).keydown(function (event) {
  2. $div.css({
  3. "background": "blue",
  4. });
  5. console.log(event);
  6. })
  7. $(window).keyup(function (event) {
  8. $div.css({
  9. "background": "blue",
  10. });
  11. console.log(event);
  12. })

keydown和keypress方法区别在于,keypress事件不会触发所有的按键,比如 ALT、CTRL、SHIFT、ESC等。

三、表单事件

  1. blur() 元素失去焦点
  2. focus() 元素获得焦点
  3. submit():用户提交表单
  4. change():表单元素的值发生变化
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>事件</title>
  8. <style>
  9. body {
  10. background-color: lightcyan;
  11. }
  12. form {
  13. background-color: #fff;
  14. display: grid;
  15. width: 15em;
  16. gap: 1em;
  17. box-shadow: 0 0 10px #888;
  18. padding: 1em;
  19. margin: 2em auto;
  20. }
  21. form input {
  22. border: none;
  23. border-bottom: 1px solid;
  24. outline: none;
  25. }
  26. form button:hover {
  27. cursor: pointer;
  28. font-weight: bolder;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <!-- <form action="check.php" onsubmit="return false"> -->
  34. <form action="check.php">
  35. <label>LOGIN:</label>
  36. <input type="text" name="username" placeholder="UserName" autofocus />
  37. <input type="password" name="password" placeholder="Password" />
  38. <button>Submit</button>
  39. </form>
  40. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
  41. <script>
  42. // JavaScript原生禁用表单默认提交事件
  43. // document.forms[0].onsubmit = (ev) => ev.preventDefault();
  44. // jquery中禁用默认行为
  45. $("form").submit((ev) => ev.preventDefault());
  46. // 获取表单的用户名输入框
  47. const user = $('input[name="username"]');
  48. // 在失去焦点时立即验证
  49. user.blur(function () {
  50. // 提示信息
  51. let tips = "";
  52. // 用户列表
  53. const users = ["admin", "shuai", "zevs","zhang"];
  54. // 非空验证
  55. if ($(this).val().length === 0) {
  56. tips = "用户名不能为空";
  57. // 重新获得焦点
  58. $(this).focus();
  59. // 在数组中查询某个值是否存在,存在返回索引,不存在返回-1
  60. } else if (users.indexOf($(this).val()) === -1) {
  61. tips = `用户名不存在, <a href="register.php" style="text-decoration:none">请注册</a>`;
  62. } else {
  63. tips = `<i style="color:green">用户名正确</i>`;
  64. }
  65. if ($(this).next()[0].tagName !== "SPAN") {
  66. // 显示提示信息到页面中
  67. $("<span></span>").html(tips).css({
  68. color: "red",
  69. fontSize: "12px",
  70. }).insertAfter($(this));
  71. }
  72. });
  73. // 添加事件方法,再通用, on('事件类型', '事件回调'),
  74. // addEventListener('eventType', callback) : on()
  75. // 当再次输入内容时删除提示
  76. user.on("input", function () {
  77. if ($(this).next()[0].tagName === "SPAN") $(this).next().remove();
  78. });
  79. </script>
  80. </body>
  81. </html>


四、绑定事件和解绑方法

  1. bind():绑定
  2. unbind():解绑
  3. on():绑定和委托都可用的方法
  4. off():解绑
  5. one():绑定一次自动解绑

jQuery中Ajax操作

jquery是一个优秀的js框架,自然对js原生的ajax进行了封装,封装后的ajax的操 作方法更简洁,功能更强大,与ajax操作相关的jquery方法有如下几种,但开发中 经常使用的有三种:

GET请求方法 $.get()

$.get(url, [data], [callback], [type])

  1. $.get('users.php?id=1',(data)=>{
  2. console.log(data);
  3. });
  4. $.get('users.php',{id:2},(data)=>{
  5. console.log(data);
  6. });

POST请求方法 $.post()

$.post(url, [data], [callback], [type])

  1. $.post('users.php',{id:3},(data)=>{
  2. console.log(data);
  3. });

jquery中$.ajax()方法使用详解

jQuery中主要使用函数$.ajax()来实现Ajax技术,$.ajax()函数包含很多参数

1.url
说明:发送请求的地址(默认为当前页面),要求是String类型的参数

2.type
说明:请求方法(post或者get),默认是get,要求是String类型的参数。其他的htpp请求如(put、delete)等也支持,但是要浏览器支持

3.data
说明:发送到服务器的数据,要求是Object或string类型的参数。如果已经不是字符串,将自动转换为字符串格式。

4.dataType:
说明:预期服务器返回的数据类型,要求为String类型的参数。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下:

  • xml:返回XML文档,可用JQuery处理。
  • html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。
  • script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。
  • json:返回JSON数据。
  • jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。
  • text:返回纯文本字符串。

5.success:
说明:请求成功后调用的回调函数,要求为Function类型的参数.

6.error:
说明:请求失败时被调用的函数。要求为Function类型的参数

  1. $.ajax({
  2. type: 'get',
  3. url: 'users.php',
  4. data: {id:2},
  5. dataType: 'text',
  6. success: function(data){
  7. },
  8. });
  9. $.ajax({
  10. type: 'post',
  11. url: 'users.php',
  12. data: {id:2},
  13. dataType: 'josn',
  14. success: (data)=>{
  15. },
  16. });
  17. // jsonp:跨域

jsonp实现跨域原理

跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的。

浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互。

如果协议,端口和主机对于两个页面是相同的,则两个页面具有相同的源,否则就是不同源的。

如果要在js里发起跨域请求,则要进行一些特殊处理了。或者,你可以把请求发到自己的服务端,再通过后台代码发起请求,再将数据返回前端

下面介绍一下使用jquery的jsonp如何发起跨域请求及其原理

1、先看下不同端口直接发起ajax请求

  1. $.ajax({
  2. url: 'http://shuai.com/demo.php',
  3. data: {
  4. username: 'admin',
  5. password: '123'
  6. },
  7. type: 'GET',
  8. success: (data)=>{
  9. console.log(data)
  10. }
  11. });

请求的结果如下图:可以看到跨域请求因为浏览器的同源策略被拦截了。

2、jsop方式实现跨域及其原理
不同端口下发起ajax请求是不可以的,但是在页面上引入不同域上的js和图片链接都是可以的。那下面就显示一下用script标签来完成一个跨域请求

jsonp :跨域,回调函数的调用语句在服务器端动态生成即可

JavaScript原生写法
添加一个<script>标签,用于发起跨域请求;注意看请求地址后面带了一个callback=showData的参数;
showData即是回调函数名称,传到后台,用于包裹数据。数据返回到前端后,就是showData(result)的形式,因为是script脚本,所以自动调用showData函数,而result就是showData的参数。
但是比较麻烦,需要自己写脚本发起请求,然后写个回调函数处理数据,不是很方便。

  1. function showData (result) {
  2. var data = JSON.stringify(result); //json对象转成字符串
  3. console.log(data);
  4. }
  5. <script src='http://shuai.com/demo.php?callback=showData&id=2'><\/script>

需要服务器端进行配合返回callback回调函数

  1. header('content-type:text/html;charset=utf-8');
  2. // 获取前端传过来的回调名称
  3. $callback = $_GET['callback'];
  4. $id = $_GET['id'];
  5. // 模拟接口数据
  6. $users = [
  7. 0 => '{"name":"朱老师", "email":"peter@php.cn"}',
  8. 1 => '{"name":"西门老师", "email":"xm@php.cn"}',
  9. 2 => '{"name":"猪哥", "email":"pig@php.cn"}'
  10. ];
  11. if (array_key_exists(($id - 1), $users)) {
  12. $user = $users[$id - 1];
  13. }
  14. // 用回调函数名称包裹返回数据,这样,返回数据就作为回调函数的参数传回去了
  15. echo $callback . '(' . $user . ')';

jQuery的jsonp方式跨域请求
服务端代码不变,js代码如下:最简单的方式,只需配置一个dataType:’jsonp’,就可以发起一个跨域请求。jsonp指定服务器返回的数据类型为jsonp格式,可以看发起的请求路径,自动带了一个callback=xxx,xxx是jquery随机生成的一个回调函数名称。

  1. $.ajax({
  2. url: "http://shuai.com/demo.php",
  3. data: {id:2},
  4. type: "GET",
  5. dataType: "jsonp", //指定服务器返回的数据类型
  6. success: function (data) {
  7. var data = JSON.stringify(data); //json对象转成字符串
  8. console.log(data)
  9. }
  10. });

再看看如何指定特定的回调函数

  1. function showData (data) {
  2. console.info("调用showData");
  3. console.log(data)
  4. }
  5. $.ajax({
  6. url: "http://shuai.com/demo.php",
  7. data: {id:2},
  8. type: "GET",
  9. dataType: "jsonp", //指定服务器返回的数据类型
  10. jsonpCallback: "showData", //指定回调函数名称
  11. success: function (data) {
  12. console.info("调用success");
  13. console.log(data)
  14. }
  15. });


fetch axios promise


Vue/jQuery/ES6输出hello world!

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>ES6/jquery/Vue</title>
  7. <!-- 引入jQuery -->
  8. <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  9. <!-- 引入Vue -->
  10. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  11. </head>
  12. <body>
  13. <h1 class="ES6"></h1>
  14. <h1 class="jquery"></h1>
  15. <h1 class="vue">{{msg}}</h1>
  16. <script>
  17. // ES6
  18. document.querySelector('.ES6').textContent = "Hello World!";
  19. // jQuery
  20. $('.jquery').text("Hello World!");
  21. // vue
  22. const vm = new Vue({
  23. el: '.vue',
  24. data: {
  25. msg: "Hello World!",
  26. },
  27. });
  28. </script>
  29. </body>
  30. </html>

初体验Vue

挂载点 数据绑定 响应式

  1. <!-- 创建一个Vue的根节点,Vue实例的作用域 -->
  2. <div id="app">
  3. <p>{{msg}}</p>
  4. <p>30+40={{30+40}}</p>
  5. </div>
  1. // 创建Vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的
  2. const vm = new Vue({
  3. // 挂载点
  4. el: "#app",
  5. // 数据绑定
  6. data: {
  7. msg: "hello world"
  8. },
  9. });
  10. console.log(vm.$data.msg); // "hello world"
  11. // 数据已经注入到Vue实例中,可以当成vue属性直接访问
  12. console.log(vm.msg); // "hello world"
  13. // 响应式
  14. vm.msg = "我已经被修改";
  15. // 此时的数据和DOM已经关联,都是响应式的,我们可以看到页面上的也相应的更新了

Vue指令v-text v-html v-once

  • v-text的作用(相当于原生js中的textContent) 用于将数据填充到标签中,作用于插值表达式类似,但是没有闪动问题 。
  • v-html的作用可以解析html结构,既是可以解析字符串内的标签等html写法,并作为网页html结构插入标签内起作用。(相当于原生js中的innerHTML)
  • v-once的作用是 定义它的元素或者组件只会渲染一次,包括元素或者组件的所有子节点.首次渲染后,不再随着数据的改变而重新渲染
  1. <div id="app">
  2. <p>{{msg1}}</p>
  3. <p v-text="msg2"></p>
  4. <p v-html="msg3"></p>
  5. <p v-once>{{msg4}}</p>
  6. </div>
  1. const vm = Vue({
  2. el: '#app',
  3. data: {
  4. msg1: "插值表达式",
  5. msg2: "v-text指令",
  6. msg3: "<h2>v-html指令</h2>",
  7. msg4: "v-once指令",
  8. },
  9. });

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议