Ajax和Jsonp实践

之前一直使用jQuery的ajax方法,导致自己对浏览器原生的XMLHttpRequest对象不是很熟悉,于是决定自己写下,以下是个人写的deom,发表一下,聊表纪念。

Ajax 和 jsonp 的javascript 实现:

/*! 
* ajax.js
* © auth zernmal 
* @ description XMLHttpRequest and Jsonp practice
*/function ajax(url,options ){var options = options || {} ,method = options.method || "GET",async = (typeof options.async !== "undefined") ? options.async : true ,user = (typeof options.user !== "undefined") ? options.user : "" ,pswd = (typeof options.pswd !== "undefined") ? options.pswd : "" ,reciveType = options.reciveType || "string" ,data = options.data || null ,header = options.header || [],callback = options.callback || function(){},xhr =  XMLHttpRequest ?  new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");if(method=='GET' && data){var dataStr = [];url = (url.indexOf("?")==-1) ? url + "?" : url + "&" ; for(var i in data){dataStr.push( i + "=" + data[i]) ;}url += dataStr.join("&");data = null;}else if(data){var form = new FormData();        for(var i in data){form.append( i , data[i]);    }data = form;}xhr.onreadystatechange = function() {if (xhr.readyState == 4) {// 4 = "loaded"if (xhr.status == 200) {// 200 = OKvar responseData = null ;if(reciveType==="string"){responseData = xhr.responseText;}else if(reciveType === "json"){responseData = xhr.responseText;if( false && JSON && JSON.parse) {responseData = JSON.parse(responseData);}else{responseData = eval('('+responseData+')');}}options.callback && options.callback(responseData);} else {alert("Problem retrieving XML data");}}};xhr.open(method , url , async , user ,pswd);    for(var i = header.length -1 ; i > 0 ; i--){xhr.setRequestHeader(header[i].type, header[i].content);    }xhr.send(data);
}function jsonp(url , options){var options = options || {} ,script = document.createElement('script') ,callback = options.callback || function(result){} ,callbackName = 'myjsonpcall'+ (new Date()).getTime(),data = options.data || {} ,dataStr = [];for(var i in data){dataStr.push( i + "=" + data[i]) ;}if(url.indexOf("?")==-1){url += "?"+ dataStr.join("&") +"&callback="+callbackName;}else{url += "&"+ dataStr.join("&") +"&callback="+callbackName;}script.setAttribute('src', url);    window[callbackName] = callback ;// 把script标签加入head,此时调用开始document.getElementsByTagName('head')[0].appendChild(script);
}

PHP服务端响应请求:

<?php$func = $_GET['func'];if(function_exists($func)){$func();}else{funcNotExist();}function funcNotExist(){echo "function is not exist ! ";}function returnJson(){$lastName = $_GET['lastName'];$firstName = $_GET['firstName'];echo json_encode(array('firstName'=>$firstName,'lastName'=>$lastName));}function returnString(){$lastName = $_GET['lastName'];$firstName = $_GET['firstName'];echo "the string you send is ".$lastName." ".$firstName;}function postReturn(){$lastName = $_POST['lastName'];$firstName = $_POST['firstName'];echo "the string you post is ".$lastName." ".$firstName;}function jsonP(){header('content-type: application/json; charset=utf-8');$lastName = $_GET['lastName'];$firstName = $_GET['firstName'];$callbackFunc = isset($_GET['callback'])? htmlspecialchars($_GET['callback']):"callback";$json = json_encode(array('firstName'=>$firstName,'lastName'=>$lastName));echo "$callbackFunc($json)";}

页面内调用方法:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Ajax与Jsonp实践</title><script type="text/javascript" src="js/ajax.js"></script>
</head>
<body>
<script>jsonp("/ajax.php?func=jsonP",{callback : function(result){console.log(result);},data : {lastName : "zernmal" , firstName : "chen"} 
});ajax("/ajax.php?func=returnJson",{method : "GET",callback : function(result){console.log(result);},data : {lastName : "zernmal" , firstName : "chen"} ,reciveType : "json"
});
</script>
</body>
</html>

以上只是简单实验,如有问题欢迎提出。

转载于:https://www.cnblogs.com/zernmal/p/3751066.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

得到前i-1个数中比A[i]小的最大值,使用set,然后二分查找

题目 有一个长度为 n 的序列 A&#xff0c;A[i] 表示序列中第 i 个数(1<i<n)。她定义序列中第 i 个数的 prev[i] 值 为前 i-1 个数中比 A[i] 小的最大的值&#xff0c;即满足 1<j<i 且 A[j]<A[i] 中最大的 A[j]&#xff0c;若不存在这样的数&#xff0c;则 pre…

学习语言贵在坚持

学习语言贵在坚持 转自&#xff1a;http://zhidao.baidu.com/link?urlr2W_TfnRwipvCDLrhZkATQxdrfghXFpZhkLxqH1oUapLOr8jXW4tScbyOKRLEPVGCx0dUfIr-30n9XV75pWYfK给大家介绍几本书和别处COPY来的学习C50个观点 《Thinking In C》&#xff1a;《C编程思想》&#xff1b; 《The…

stl vector 函数_在C ++ STL中使用vector :: begin()和vector :: end()函数打印矢量的所有元素...

stl vector 函数打印向量的所有元素 (Printing all elements of a vector) To print all elements of a vector, we can use two functions 1) vector::begin() and vector::end() functions. 要打印矢量的所有元素&#xff0c;我们可以使用两个函数&#xff1a;1) vector :: b…

JqueryUI入门

Jquery UI 是一套开源免费的、基于Jquery的插件&#xff0c;在这里记录下Jquery UI 的初步使用。 第一、下载安装 下载Jquery,官网&#xff1a;http://jquery.com;  下载Jquery UI&#xff0c;官网&#xff1a;http://jqueryui.com/ Jquery的部署就不说了&#xff0c;说下Jqu…

gp的分布、分区策略(概述)

对于大规模并行处理数据库来说&#xff0c;一般由单master与多segment组成。 那么数据表的单行会被分配到一个或多个segment上&#xff0c;此时需要想一想分布策略 分布 在gp6中&#xff0c;共有三个策略&#xff1a; 哈希分布 随机分布 复制分布 哈希分布 就是对分布键进行…

[ Java4Android ] Java基本概念

视频来自&#xff1a;http://www.marschen.com/ 1.什么是环境变量 2.JDK里面有些什么&#xff1f; 3.什么是JRE&#xff1f; 什么是环境变量&#xff1f; 1.环境变量通常是指在操作系统当中&#xff0c;用来指定操作系统运行时需要的一些参数; 2.环境变量通常为一系列的键值对&…

_thread_in_vm_Java Thread类的静态void sleep(long time_in_ms,int time_in_ns)方法,带示例

_thread_in_vm线程类静态无效睡眠(long time_in_ms&#xff0c;int time_in_ns) (Thread Class static void sleep(long time_in_ms, int time_in_ns)) This method is available in package java.lang.Thread.sleep(long time_in_ms, int time_in_ns). 软件包java.lang.Thread…

大规模web服务开发技术(转)

前段时间趁空把《大规模web服务开发技术》这本书看完了&#xff0c;今天用一下午时间重新翻了一遍&#xff0c;把其中的要点记了下来&#xff0c;权当复习和备忘。由于自己对数据压缩、全文检索等还算比较熟&#xff0c;所以笔记内容主要涉及前5章内容&#xff0c;后面的零星记…

IO多路复用的三种机制Select,Poll,Epoll

IO多路复用的本质是通过系统内核缓冲IO数据让单个进程可以监视多个文件描述符&#xff0c;一旦某个进程描述符就绪(读/写就绪)&#xff0c;就能够通知程序进行相应的读写操作。 select poll epoll都是Linux提供的IO复用方式&#xff0c;它们本质上都是同步IO&#xff0c;因为它…

qt中按钮贴图

一.QT之QPushButton按钮贴图 二.QT之QToolButton按钮贴图 一.QT之QPushButton按钮贴图具体操作流程 1. Qt Designer中拖入一Tool Button 2. 选择图标的图片放入工程目录下&#xff0c;如放在Resources内 3. 双击工程的Resource Files下的qrc文件&#xff0c;如图 4. 在弹出的窗…

Ubuntu手动编译gVim7.3修复终端启动时与ibus的冲突

个bug伴随着Ubuntu/ibus的升级苦憋已久&#xff0c;症状为终端启动gvim时卡死&#xff0c;gvim -f可以缓解此问题&#xff0c;但偶尔还是要发作&#xff0c;况且每次末尾托个&也不方便。其实新版gvim已经修复此bug&#xff0c;不过ubuntu安装包一直没更新&#xff0c;那我们…

Android Activity类讲解(一)

--by CY[kotomifigmail.com] &#xff11;&#xff0e;protected void onCreate(Bundle savedInstanceState) { throw new RuntimeException("Stub!");   } 当创建一个Activity时&#xff0c;系统会自动调用onCreate方法来完成创建工作&#xff0e;该创建工作包括布…

Mysql的undo、redo、bin log分析

目录关于undo log关于redolog关于binlog一个事务的提交流程undo log :记录数据被修改之前的样子 redo log&#xff1a;记录数据被修改之后的样子 bin log&#xff1a;记录整个操作。 关于undo log 关于undo log&#xff1a; 在执行一条涉及数据变更的sql时&#xff0c;在数据…

typedef 字符串_typedef在C中使用字符数组(定义别名来声明字符串)的示例

typedef 字符串Here, we have to define an alias for a character array with a given number of maximum characters length to read strings? 在这里&#xff0c;我们必须为具有给定最大字符长度数的字符数组定义别名&#xff0c;以读取字符串 &#xff1f; In the below-…

最小堆实现代码

参考算法导论、数据结构相关书籍&#xff0c;写得最小堆实现的源代码如下&#xff1a; 1 //2 //--最小堆实例3 //4 5 #include <iostream>6 #include <vector>7 #include <string>8 using namespace std;9 10 template<typename Comparable>11 class m…

非常好的在网页中显示pdf的方法

今天有一需求&#xff0c;要在网页中显示pdf&#xff0c;于是立马开始搜索解决方案&#xff0c;无意中发现一个非常好的解决方法&#xff0c;详见http://blogs.adobe.com/pdfdevjunkie/web_designers_guide。 其实就光看这个网站也足够了&#xff0c;http://www.pdfobject.com/…

Redis字典实现、Hash键冲突以及渐进式rehash

本笔记参考《Redis设计与实现》 P24~ 37 目录Redis字典实现哈希表节点结构哈希表结构字典哈希算法解决hash冲突rehash渐进式hashRedis字典实现 哈希表节点结构 typedef struct dictEntry {// 键void *key;// 值 : 可以是一个指针&#xff0c;或者是一个uint64/int64 的整数un…

Java线程类void setContextClassLoader(ClassLoader loader)方法,带示例

线程类void setContextClassLoader(ClassLoader loader) (Thread Class void setContextClassLoader(ClassLoader loader)) This method is available in package java.lang.Thread.setContextClassLoader(ClassLoader loader). 软件包java.lang.Thread.setContextClassLoader(…

JPA概要

本文最新版已更新至&#xff1a;http://thinkinside.tk/2012/12/30/JPA.html JPA定义了Java ORM及实体操作API的标准。本文摘录了JPA的一些关键信息以备查阅。 如果有hibernate的基础&#xff0c;通过本文也可以快速掌握JPA的基本概念及使用。 Table of Contents 1 JPA概述2 实…

如何配置能让fiddler抓去https的请求?

1、打开fiddler&#xff0c;>>Tools>>Fiddler Options&#xff0c; 打开如图所示的HTTPS配置项&#xff1a;点击Export Rppt Certifica to Desktop :桌面上多了一个证书&#xff1a;下面就是将证书导入&#xff1a;点击开始-运行&#xff0c;输入&#xff1a;mmc,…