在CORS出现之前,为实现跨域Ajax通信,开发人员利用DOM中能够执行跨域请求的功能,在不依赖XHR对象的情况下也能发送某种请求。
1、图像Ping
这里使用<img>标签。一个网页可以从任何网页中加载图像,不用担心跨域或不跨域。
动态创建图像经常用于图像Ping。图像Ping是与服务器进行简单、单向的跨域通信的一种方式。
请求的数据:以查询字符串形式发送
响应的数据:可以是任意内容,但通常是像素图或204响应

1 var img = new Image();
2 img.onload = img.onerror = function(){
3 alert("Done!");
4 };
5 img.src = "http://www.example.com/test?name=Anna";

请求从设置src属性那一刻开始。
图像Ping最常用于跟踪用户点击页面或动态广告曝光次数。
两个主要缺点
a、只能发送GET请求;
b、无法访问服务器的响应文本。
因此,图像Ping只能用于浏览器与服务器间的单向通信。

2、JSONP
JSONP是JSON with padding(填充式JSON或参数式JSON)的简写,是应用JSON的一种新方法。
JSONP是被包含在函数调用中的JSON:
callback({ "name": "Nicholas"});
JSONP由2部分组成:回调函数和数据。
回调函数是当响应到来时应该在页面中调用的函数。回调函数的名字一般是在请求中指定的。数据是传入回调函数中的JSON数据。
JSONP请求:
http://freegeoip.net/json/?callback=handleResponse
通过查询字符串来指定JSONP服务的回调参数是很常见的,像上面的URL所示,这里指定的回调函数的名字叫handleResponse()。

1 function handleResponse(response){
2 alert("You're at IP address " + response.ip + ", which is in " + response.city + ", " + response.region_name);
3 }
4 var script = document.createElement("script");
5 script.src = "http://freegeoip.net/json/?callback=handleResponse";
6 document.body.insertBefore(script, document.body.firstChild);

<script>元素可以不受限制地从其他域加载资源。因为JSONP是有效的Javascript代码,所以在请求完成后,即在JSONP响应加载到页面中以后,就会立即执行。
JSONP非常简单易用,能够直接访问响应文本,支持在浏览器和服务器之间双向通信。
JSONP不足
JSONP是从其他域中加载代码执行。如果其他域不安全,很可能会在响应中夹带一些恶意代码,而此时除了完全放弃JSONP调用之外,没有办法追究;
要确定JSONP请求是否失败不容易。虽然HTML5给<script>元素新增了一个onerror事件处理程序,但浏览器支持情况不好。为此,不得不使用计时器检测指定时间内是否接收到了响应。但这样也不能尽如人意,因为不是每个用户上网的速度和宽带都一样。

Javascript Ajax总结——其他跨域技术之图像Ping和JSONP的更多相关文章

  1. AJAX优势、跨域方案及JSON数据格式和浏览器中JSON对象

    ajax 不重新加载整个网页的情况下,更新部分网页的技术 注意:ajax只有在服务器上运行才能生效,我在本地一般用phpstudy 优点: 1.优化用户体验 2.承担了一部分本该服务器端的工作,减轻了 ...

  2. AJAX跨域调用相关知识-CORS和JSONP(引)

    AJAX跨域调用相关知识-CORS和JSONP 1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常 ...

  3. js中ajax如何解决跨域请求

    js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...

  4. 从零开始学 Web 之 Vue.js(四)Vue的Ajax请求和跨域

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  5. jquery的ajax和getJson跨域获取json数据

    目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的. jsonp是英文json with padding的缩写.它允许在服务器端 ...

  6. ajax请求ashx跨域问题解决办法

    ajax请求ashx跨域问题解决办法 https://blog.csdn.net/windowsliusheng/article/details/51583566 翻译windowsliusheng  ...

  7. 跨域问题及其解决方法(JSONP&CORS)

    一.什么是跨域 当a.qq.com域名下的页⾯或脚本试图去请求b.qq.com域名下的资源时,就是典型的跨域行为.跨域的定义从受限范围可以分为两种,⼴义跨域和狭义跨域. (一)广义跨域 ⼴义跨域通常包 ...

  8. JavaScript JSON AJAX 同源策略 跨域请求

    网页和Ajax和跨域的关系 1 Ajax使网页可以动态地.异步地的与服务器进行数据交互,可以让网页局部地与服务器进行数据交互 2 Ajax强调的是异步,但是会碰到跨域的问题. 3 而有很多技术可以解决 ...

  9. AJAX请求和跨域请求详解(原生JS、Jquery)

    一.概述 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX = 异步 JavaScript 和 XML,是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数 ...

  10. (转)jquery ajax使用及跨域访问解决办法

    原文地址:***/UIweb/jquery_ajax_kuayujiejue.html 最近开发中,设计到智能手机项目,给领导做几个demo.主要是用jquery和jqeury mobile. 越来越 ...

随机推荐

  1. Codeforces Round 882 div.2 A

    Smiling&Weeping ----总有人间一两风,填我十万八千梦 A. The Man who became a God time limit per test 1 second mem ...

  2. 2016A

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm& ...

  3. 6.2 Sunday搜索内存特征

    Sunday 算法是一种字符串搜索算法,由Daniel M.Sunday于1990年开发,该算法用于在较长的字符串中查找子字符串的位置.算法通过将要搜索的模式的字符与要搜索的字符串的字符进行比较,从模 ...

  4. 02-Shell变量

    1.Shell变量 1.1 Shell变量的介绍 变量用于存储管理临时的数据, 这些数据都是在运行内存中的. 1.2 变量类型 系统环境变量 自定义变量 特殊符号变量 2.系统环境变量 2.1 介绍 ...

  5. Python面试——基础面试题

    文章目录 1.Python 和 Java.PHP.C.C#.C++等其他语言的对比? C语言既有高级语言的特点,又具有汇编语言的特点,它是结构式语言.C语言应用指针:可以直接进行靠近硬件的操作,但是C ...

  6. linux日常运维(三) GRUB 2的维护

    GRUB 2简介 GRUB GRUB是linux系统默认的引导加载程序.linux加载一个系统前,它必须有一个引导加载程序中特定指令(比如MBR记录)去引导系统.这个程序一般是位于系统的主硬盘驱动器或 ...

  7. 2023_10_10_MYSQL_DAY_02_笔记

    2023_10_10_MYSQL_DAY_02_笔记 #在 FROM 子句中使用子查询 SELECT a.ename, a.sal, a.deptno, b.salavg FROM emp a, (S ...

  8. 维修道路(repair)

    维修道路(repair) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 由于在十多年前道路改建时的突出贡献, Bob 被任命为维修道路的承包商, 他可以任意 选择两条路径去修理. Bo ...

  9. 用Rust手把手编写一个Proxy(代理), 准备篇, 动手造轮子

    用Rust手把手编写一个Proxy(代理), 准备篇, 动手造轮子 wmproxy 将实现http/https代理, socks5代理, 后续将实现websocket代理, 内外网穿透等, 会将实现过 ...

  10. hammer.js学习

    demo:https://github.com/fei1314/HammerJs/tree/master 知识点: hammer--手势识别:点击.长按.滑动.拖动.旋转.缩放 方法: tap 快速的 ...