javascript与服务器3
一, 带参数的XMLHTTP请求
1, 进行get请求
get请求最常见的是在浏览器地址栏中输入URL并打开页面时,这就是向服务器发送一个get请求. 它的限制是URL最大长度不能超过2048字符(2KB)
例如:
var oRequest = CreateXMLHttpRequest(); //利用上篇创建的方法获得一个XMLHTTP对象
var url = "http://www.cnblogs.com/article?id=1001&name="12345";
oRequest.open("get",url,false); // 同步发送一个带有参数的get请求
为了能够更好的设置参数, 我们来创建一个函数
function setURLParam(url,paramName,paramValue){
url += (url.indexOf("?")==-1? "?": "&");
url += encodeURIComponent(paramName)+ "=" +encodeURIComponent(paramValue); --URL必须要编码,否则可能出错.
return url
}
改写上面的例子通过get方式发送请求:
var oRequest = CreateXMLHttpRequest();
var url = "http://www.cnblogs.com/article";
url = setURLParam(url,"id",1001); //设置第一个参数
url = setURLParam(url,"name","12345"); //设置第二个参数
oRequest.open("get",url,false);
oRequest.send(null); 2, 进行post请求
post请求常用于表单提交, 因为post请求可以比get请求发送的数据更多(约2GB). 另外post请求附加的参数不会添加到url上,所以必须通过send()方法添加参数.如:
oRequest.send("name1=value1&name2=value2");
所以我们也通过函数来添加参数.
function addPostParam(sParams,sParamName,sParamValue){
if(sParams.length>0) //判断是否设置过参数
sParams +="&";
return sParams +encodeURIComponent(sParamName) + "="
+ encodeURIComponent(sParamValue);
}
改写前面的例子通过post方式发送请求:
var oRequest = CreateXMLHttpRequest();
var url = "http://www.cnblogs.com/article";
var sParams ="";
sParams = addPostParam(sParams,"id",1001); //设置第一个参数
sParams = addPostParam(sParams,"name","12345"); //设置第二个参数
oRequest.open("post",url,false); //post请求
oRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //进行post请求必须要设置此项
oRequest.send(sParams); //请求的参数在这里设置 二, LiveConnect请求
在客户端没有安装MSXML进行XMLHTTP请求时,还有另外一种请求方式,它是LiveConnect请求,是Netscape Navigator创建的请求方式,它是一种可以让javascript调用java类来实现客户端和服务器交互的方式. 使用这种请求客户端必须安装Java运行时环境(Java Runtime Environment,JRE), 同时浏览器还要启用Java才可以.既然能把这种方式拿出来讲, 一定有它特殊意义. 因为现代的浏览器(除IE外)都支持LiveConnect. 它允许访问Java提供的所有HTTP相关的库.
1. 使用LiveConnect进行get请求
本质上是通过调用Java中的HTTP类库来实现的.
function httpGet(sURL){
var sResponseText = "";
var oURL = new java.net.URL(sURL); //通过URL实例化一个Java对象
var oStream = oURL.openStream(); //打开一个输入流
var oReader = new java.io.BufferedReader(new java.io.InputStreamReader(oStream)); //创建缓冲阅读器 var sLine = oReader.readLine(); //逐行读取
while (sLine != null) {
sResponseText += sLine + "\n";
sLine = oReader.readLine();
} oReader.close();
return sResponseText; //返回服务器响应文本
}
使用:
<html>
<head>
<title>LiveConnect Example</title>
function getServerInfo() {
var sURL ="http://www.cnblogs.com/article/"
sURL = addURLParam(sURL,"id",1001);
sURL = addURLParam(sURL,"name","12345");
var sResponseText = httpGet(sURL);
alert("Response text is: " + sResponseText);
}
</script>
</head>
<body>
<input type="button" onclick="getServerInfo()" value="点击获取服务器信息" />
</body>
</html> 2. 使用LiveConnect进行post请求
function httpPost(sURL, sParams) {
var oURL = new java.net.URL(sURL); //实例化Java请求对象
var oConnection = oURL.openConnection(); //创建连接对象 oConnection.setDoInput(true); //设置连接对象可以接收输入和输出
oConnection.setDoOutput(true);
oConnection.setUseCaches(false); //连接不使用缓存数据
oConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); //添加http首部, 因为post必须此设置. var oOutput = new java.io.DataOutputStream(oConnection.getOutputStream()); //从连接对象中获取请求的输入流
oOutput.writeBytes(sParams); // 把参数写入到输入流中
oOutput.flush(); //立刻发送请求
oOutput.close(); //关闭输入流 var sLine = "", sResponseText = ""; var oInput = new java.io.DataInputStream(oConnection.getInputStream()); //从连接对象中获取输出流
sLine = oInput.readLine(); //逐行读取输出流 while (sLine != null){
sResponseText += sLine + "\n";
sLine = oInput.readLine();
} oInput.close(); //关闭输出流 return sResponseText; //返回文本
}
使用:
<html>
<head>
<title>LiveConnect Example</title>
<script type="text/javascript">
function getServerInfo() {
var sURL ="http://www.cnblogs.com/article/"; //请求的URL
var sParams = "";
sParams = addPostParam(sParams, "id", 1001); //添加第一个参数
sParams = addPostParam(sParams, "name", "12345"); //添加第二个参数
var sResponseText = httpPost(sURL , sParams); //通过LiveConnect进行post请求
alert("Response text is: " + sResponseText);
}
</script>
</head>
<body>
<input type="button" onclick="getServerInfo()" value="Get Server info" />
</body>
</html> 三, 构建一个智能的HTTP请求函数库.
如果客户端不能进行XMLHTTP请求则进行LiveConnect请求,这就是所谓的智能HTTP请求. 我们封装在一个http.js里, 便于使用.
// 判断客户端是否支持XMLHTTP请求
var bXmlHttpSupport = (typeof XMLHttpRequest == "object" || window.ActiveXObject);
//LiveConnect对象进行post请求
function httpPost(sURL, sParams) { var oURL = new java.net.URL(sURL);
var oConnection = oURL.openConnection();
oConnection.setDoInput(true);
oConnection.setDoOutput(true);
oConnection.setUseCaches(false);
oConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
var oOutput = new java.io.DataOutputStream(oConnection.getOutputStream());
oOutput.writeBytes(sParams);
oOutput.flush();
oOutput.close();
var sLine = "", sResponseText = "";
var oInput = new java.io.DataInputStream(oConnection.getInputStream());
sLine = oInput.readLine(); while (sLine != null){
sResponseText += sLine + "\n";
sLine = oInput.readLine();
} oInput.close();
return sResponseText;
}
//添加Post请求需要发送的参数
function addPostParam(sParams, sParamName, sParamValue) {
if (sParams.length > 0) {
sParams += "&";
}
return sParams + encodeURIComponent(sParamName) + "="
+ encodeURIComponent(sParamValue);
}
//添加get请求需要发送的参数
function addURLParam(sURL, sParamName, sParamValue) {
sURL += (sURL.indexOf("?") == -1 ? "?" : "&");
sURL += encodeURIComponent(sParamName) + "=" + encodeURIComponent(sParamValue);
return sURL;
}
//LiveConnect对象get请求
function httpGet(sURL) {
var sResponseText = "";
var oURL = new java.net.URL(sURL);
var oStream = oURL.openStream();
var oReader = new java.io.BufferedReader(new java.io.InputStreamReader(oStream)); var sLine = oReader.readLine();
while (sLine != null) {
sResponseText += sLine + "\n";
sLine = oReader.readLine();
} oReader.close();
return sResponseText;
}
// 创建统一的的XMLHTTP请求对象
if (typeof XMLHttpRequest == "undefined" && window.ActiveXObject) {
function XMLHttpRequest() {
var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
"Microsoft.XMLHTTP"]; for (var i=0; i < arrSignatures.length; i++) {
try { var oRequest = new ActiveXObject(arrSignatures); return oRequest; } catch (oError) {
//ignore
}
}
throw new Error("MSXML is not installed on your system.");
}
}
//进行智能请求
var Http = new Object;
Http.get = function (sURL, fnCallback) { if (bXmlHttpSupport) { var oRequest = new XMLHttpRequest();
oRequest.open("get", sURL, true);
oRequest.onreadystatechange = function () {
if (oRequest.readyState == 4) {
fnCallback(oRequest.responseText);
}
}
oRequest.send(null); } else if (navigator.javaEnabled() && typeof java != "undefined"
&& typeof java.net != "undefined") { setTimeout(function () {
fnCallback(httpGet(sURL));
}, 10);
} else {
alert("Your browser doesn't support HTTP requests.");
}
};
Http.post = function (sURL, sParams, fnCallback) { if (bXmlHttpSupport) { var oRequest = new XMLHttpRequest();
oRequest.open("post", sURL, true);
oRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
oRequest.onreadystatechange = function () {
if (oRequest.readyState == 4) {
fnCallback(oRequest.responseText);
}
}
oRequest.send(sParams); } else if (navigator.javaEnabled() && typeof java != "undefined"
&& typeof java.net != "undefined") { setTimeout(function () {
fnCallback(httpPost(sURL, sParams));
}, 10);
} else {
alert("Your browser doesn't support HTTP requests.");
}
};
javascript与服务器3的更多相关文章
- 意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分
最近研发BDC 云开发部署平台的数据路由及服务管理器意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提 ...
- javascript与服务器1
A. 通过在客户端设置Cookie,然后在服务器端读取它. 关于Cookie只说明一点, 它是存储在客户端机器上的一小块信息, 可以有客户端程序或服务器程序创建,并通过http传递.常用于跟踪用户在客 ...
- javascript与服务器2
一, 通过IE建立XMLHTTP请求 这种请求方式源自与微软创建了XMLHTTP请求对象,只要用户的机器上安装了MSXML就可以发送XMLHTTP请求来创建客户端和服务器端的通信, XMLHTTP请求 ...
- 展示html/javascript/css------Live-Server服务器
Live-server简介 这是一款带有热加载功能的小型开发服务器.用它来展示你的HTML / JavaScript / CSS,但不能用于部署最终的网站. 官网地址:https://www.npmj ...
- 使用javascript获取服务器时间
思路:采用异步请求的方式,发送请求,获取HTTP请求的response头,头部中包含时间,使用getResponseHeader('Date')即可. 注意:以下任何一种方法都不精确,因为请求包的传输 ...
- Javascript获取服务器时间
//获取服务器时间 var getServerDate = function () { var xmlHttpRequest = null, serverDate = new Date ...
- javascript中的错误处理机制
× 目录 [1]对象 [2]类型 [3]事件[4]throw[5]try[6]常见错误 前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较 ...
- php面试题之二——Javascript(基础部分)
二.JavaScript部分 1. JS 表单弹出对话框函数是?获得输入焦点函数是? 弹出对话框函数:alert(), prompt(), confirm() 获得输入焦点函数:focus() 2. ...
- C# 实现HTML5服务器推送事件
为什么需要服务器推送事件: 因为如果需要保持前台数据的实时更新例如,IM聊天,股票信息, 1.可以在客户端不断地调用服务端的方法来获得新数据,但是这样会很消耗服务器资源,导致系统变慢! 2 html5 ...
随机推荐
- 【Ext.Net学习笔记】01:在ASP.NET WebForm中使用Ext.Net
Ext.NET是基于跨浏览器的ExtJS库和.NET Framework的一套支持ASP.NET AJAX的开源Web控件,包含有丰富的Ajax运用,其前身是Coolite. 下载地址:http:// ...
- ZBrush中的Clip剪切笔刷怎么快速运用
Clip剪切笔刷可以对模型网格进行剪切操作,也可以叫做剪切笔刷.接下来看一下Clip切割笔刷在ZBrush中是如何使用的. 查看更多内容请直接前往:http://www.zbrushcn.com/ji ...
- 第22章 DLL注入和API拦截(3)
22.6 API拦截的一个例子 22.6.1 通过覆盖代码来拦截API (1)实现过程 ①在内存中对要拦截的函数(假设是Kernel32.dll中的ExitProcess)进行定位,从而得到它的内存地 ...
- C++ 箭头-> 双冒号:: 点号.操作符区别
点 (.) 如果变量是一个对象或者对象引用,则用它来访问对象成员. 箭头( ->) 如果变量是一个对象指针,则用它来访问对象成员. 双冒号 (::) 如果操作目标是一个具有名空间的标识符,则用它 ...
- java 15 - 6 List的方法
List集合的特有功能: A:添加功能 void add(int index,Object element):在指定索引处添加元素 B:获取功能 Object get(int index):获取指定索 ...
- jq 获取table元素,ajax 静态填加数据
知识点: 1.jq如何操作table->操作html内的元素 2. this 怎么使用 问题: 1.点击 修改 后,自动刷新了.判断取值,提示错误.正确出不来 2.ajax传值操作如何保密 ht ...
- Intellij IDEA 快捷键(Mac)
编辑 格式化代码 Alt+Command+L 大小写切换 Shift+Command+U 包围 Alt+Command+T 选中代码抽取方法 Alt+Command+M 调试/运行 查看 类关系视图 ...
- 16Spring_AOP编程(AspectJ)_最终通知
- .Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结
.Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结 在什么情况下会出现OutOfMemonryException呢? 在我们试图新建一个对象时,而垃圾 ...
- 突然想起android与mfc差异
两者都可以算作是客户端程序,都是做上位机用的.而且都是被动执行. 相同点: 1.MFC中,它是由 project的名字 里面的某个成员函数来初始化,窗体,以及窗体里面的变量. 后面都是监听消息循环.数 ...