ajax & jsonp & img

ajax 是一种请求服务器的方式,核心是XMLHttpRequest对象;

优点是无需刷新页面,

缺点是不能跨域请求。


/*
* Ajax direacted by Zakas
*
* Ajax.get("url?p=value", function (data) { // handle data }, false);
*
* Ajax.post("url",{
* data : "p=value&id=001",
* callback : function (data) { // handle data },
* async : false
* });
*
*/
var Ajax = (function () {

"use strict";

var ajax = {

// 惰性载入函数
createXHR: (function () {

if (window.XMLHttpRequest) {

// 不论new多少次XHR,if只需判断一次
return function () {
return new XMLHttpRequest();
};
} else {

// only for ie 6 hack
return function () {
return new ActiveXObject("Microsoft.XMLHTTP");
};
}
}()),

get: function (url, callback, async) {

var XHR = this.createXHR();

// 默认异步请求
if (async !== false) {
async = true;
}

if (async) {

// 异步请求
XHR.onreadystatechange = function () {

if (XHR.readyState === 4 && XHR.status === 200) {
callback(XHR.responseText);

// 销毁不用的对象,因为每次ajax请求都会创建一个新的XHR
XHR = null;
}
}

XHR.open("get", url, true);
XHR.send(null);
} else {

// 同步请求,返回结果前停止解析上下文
XHR.open("get", url, false);
XHR.send(null);
callback(XHR.responseText);
XHR = null;
}
},

post: function (url, option) {

var XHR = this.createXHR();
data = option.data,
callback = option.callback,
async = option.async;

if (async !== false) {
async = true;
}

if (async) {

XHR.onreadystatechange = function () {

if (XHR.readyState === 4 && XHR.status === 200) {
callback(XHR.responseText);
XHR = null;
}
}

XHR.open("post", url, true);
XHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
XHR.send(data);
} else {
XHR.open("post", url, false);
XHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
XHR.send(data);
callback(XHR.responseText);
XHR = null;
}
}
};

return ajax;
}());

页面中常见的能够跨域进行http请求的有两个标签:<script src=""></script> &&
<img src="" />

jsonp(JSON with padding)的原理就是<script src=""></script>


// jsonp 是一种可以通过约定进行自定义回调函数的跨域脚本

// 预先定义回调函数
function handleResponse (data) {
// data is a json from remote-source-domain, now deal it in this.
}

var script = document.createElement("script");
script.src = "http://remote-source-domain?callback=handleResponse"; // 远程脚本中的数据:handleResponse({data: "json", time: "2014-06-11"});
document.getElementsByTagName("head")[0].appendChild(script); // 当脚本被加载到文档中时,handleResponse函数立即执行

IMG


// 当img对象被赋予src属性时立即发生http请求
var img = new Image();
img.src = "http://remote-source-domain"; // 此时发生了http请求,远程资源被加载到本地

// 图片的预加载
var imgArr = ["0.jpg", "1.jpg", "2.jpg"],
len = imgArr.length,
i;

for (i = 0; i < len; i++) {
img.src = imgArr[i];
}

ajax & jsonp & img,布布扣,bubuko.com

时间: 2024-10-11 17:45:25

ajax & jsonp & img的相关文章

JQuery+ajax+jsonp 跨域访问

Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料. 关于Jsonp更详细的资料请参考http://baike.baidu.com/view/2131174.htm,下面给出例子: 一.客户端 Html代码   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.

项目中关于ajax jsonp的使用

项目中关于ajax jsonp的使用,出现了问题:可以成功获得请求结果,但没有执行success方法总算搞定了,记录一下 function TestAjax() {    $.ajax({        type : "get",        async : false,        url : "ajaxHandler.ashx", //实际上访问时产生的地址为: ajax.ashx?callbackfun=jsonpCallback&id=10   

PHP AJAX JSONP实现跨域请求使用实例

在之前我写过“php返回json数据简单实例”,“php返回json数据中文显示的问题”和“在PHP语言中使用JSON和将json还原成数组”.有兴趣的童鞋可以看看 今天我写的是PHP AJAX JSONP使用的实例.不清楚jsonp是什么的请自己搜索 实例1 test.html <!doctype html> <html> <head> <meta charset="utf-8"> <title>test</title

jquery ajax jsonp跨域调用实例代码

今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友 客户端代码 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApp.WebForm1" %><!DOCTYPE html P

跨域请求之jQuery的ajax jsonp的使用解惑

转自:http://www.cnblogs.com/know/archive/2011/10/09/2204005.html 前天在项目中写的一个ajax jsonp的使用,出现了问题:可以成功获得请求结果,但没有执行success方法,直接执行了error方法提示错误——ajax jsonp之前并没有用过,对其的理解为跟普通的ajax请求差不多,没有深入了解:出现了这种错误,几经调试(检查后台的代码和js部分的属性设置)还是不行,让我感觉很是意外和不解.于是,决定仔细研究下ajax jsonp

jQuery源码分析系列(35) : Ajax - jsonp的实现与原理

ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本 json核心就是:允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了. jquery ext dojo这类库的实现手段其实大同小异 在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,但img.iframe.s

ajax jsonp函数调用

jsonp数据 jsonpHandler({name:"liujinyu",age:"24"}) ajax调用 $.ajax({    type:'GET',    url:"http://10.14.85.90/data/people.html",    dataType:'jsonp',    cache:true,    async:true,    //jsonp: "jsonpHandler",//传递给请求处理程序

你不知道的jQuery Item11 -- ajax jsonp跨域方法详解

文章从JSON和JSONP区别开始讲起,用实例来对比他们之间的不同之处,然后详细讲解了jQuery中的ajax jsonp的使用并给出了示例及详细参数说明. 1.JSON和JSONP JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于在浏览器和服务器之间交换信息. JSONP(JSON With Padding),就是打包在函数调用中的的JSON(或者包裹的JSON),你要跨域请求别人的东西,你肯定要包裹起来,不要污染了别人的东西,把Json数据包裹

AJAX JSONP源码实现

关于JSONP以及跨域问题,请自行搜索. 本文重点给出AJAX JSONP的模拟实现代码,代码中JSONP的基本原理也一目了然. <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>模拟实现AJAX JSONP源码</title> <script type="text/javascript"> // 生成随机字符串 function rando