javascript jquery php 中ajax请求其他页面(ajax jqXHR curl)跨域
html javascript php 中请求其他页面的方式(ajax jqXHR curl)
一. html (链接,FORM提交)
- 直间用链接访问, 这种方式始终是 get 方式
api/tyds/user/id/1- defaulting to XML - Form post /get 提交 访问
<form id="login_form" class="left" method="POST" name="loginForm" target="_blank" action="restsever/api/tyds/user/id/1/format/json"></form>
二. Javascript
- AJAX 访问 使用 XMLHttpRequest 对象的 open() 和 send() 方法将请求发送到服务器:
-
提示: 这种方式, 在IE8 里, 可以跨域访问, 一般有风险提示。 在FIREFOX9.01 里,不能跨域使用。以下是代码和解释:
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
if (xmlhttp!=null)
{
可以给他直接赋页面里已定义函数的名称 xmlhttp.onreadystatechange=state_Change; 或直接写回调函数:
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var mystr ='';
var resultdiv = document.getElementByIdx_x_x("resultdiv");
mystr = xmlhttp.responseText;
转换返回的 Json类型文本为 javascript json对象
jsonstr=xmlhttp.responseText;
var re= /^[{\[].+[}\]]$/;
if (jsonstr.match(re)){
eval_r("var objResults =" + xmlhttp.responseText);
}
if (objResults)
{mystr =mystr +"<br/>------------------------------------<br/>";
mystr =mystr + objResults[0].name;
}
if (mystr != '')
{mystr =mystr +"<br/>------------------------------------<br/>";}
操作返回的XML对象:
var myxmldoc = xmlhttp.responseXML;
if (myxmldoc != null && myxmldoc.documentElement != null)
{ var mystr =myxmldoc.documentElement.childNodes[1].getAttribute('Text');
var oNode = myxmldoc.documentElement.childNodes[1].childNodes;
for (i=0;i<oNode.length;i++)
{ mystr = mystr +" -- "+ oNode[i].getAttribute('Text'); }
}
利用 innerhtml.js 文件里的set_innerHTML函数,解决返回内容里的 script标签里的代码执行问题:
set_innerHTML('resultdiv', mystr);
或 直接给相关容器里赋值填充:
resultdiv.innerHTML = mystr;
}}
1. GET 方法请求页面
xmlhttp.open("GET","restsever/api/tyds/user/id/1/format/json",true);
xmlhttp.send(null);
2. POST 方法请求页面
xmlhttp.open("POST","restsever/api/tyds/user/id/1/format/json",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("name=luhd&email=xxx@163.com&theway=mpost");
在服务器的php 接受请求页面, 用 $this->post(); 接收引用 xmlhttp.send()过去的数据, 如: $this->post('theway');
3. PUT 方法请求页面
xmlhttp.open("PUT","restsever/api/tyds/user/id/1/format/json",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("name=luhd&email=xxx@163.com&theway=mput");
在服务器的php 接受请求页面, 用 $this->put(); 接收引用 xmlhttp.send()过去的数据, 如: $this->put('theway');
4. DELETE 方法请求页面
xmlhttp.open("PUT","restsever/api/tyds/user/id/1/format/json",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("name=luhd&email=xxx@163.com&theway=mdelete");
在服务器的php 接受请求页面, 用 $this->delete(); 接收引用 xmlhttp.send()过去的数据, 如: $this->put('theway');
5. 需要验证的页面, 不管他用哪种方式验证, (basic digest .....) 都在函数参数里加上用户名, 密码即可
xmlhttp.open("GET","restsever/api/tyds/send/format/json",true, "luhd", "123456");
xmlhttp.open("GET","restsever/api/tyds/digestf/format/json",true, "luhd", "123456");
对于没有加上用户名, 密码参数的 请求, 返回的页面会自动弹出需要验证的窗口
xmlhttp.open("GET","restsever/api/tyds/send/format/json",true);
xmlhttp.send(null);
else
{
alert("Your browser does not support XMLHTTP");
}xmlhttp方法 描述 open(method,url,async) 规定请求的类型、URL 以及是否异步处理请求。
- method:请求的类型;GET 或 POST
- url:文件在服务器上的位置
- async:true(异步)或 false(同步)
send(string) 将请求发送到服务器。
- string:仅用于 POST 请求
如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:
xmlhttp.open("POST","ajax_test.asp",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Bill&lname=Gates");open() 方法的 async 参数[可选] 布尔型,指定此请求是否为异步方式,默认为true。如果为真,当状态改变时会调用onreadystatechange属性指定的回调函数。请在函数里提供响应 onreadystatechange 事件中的不同状态下执行的代码:
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementByIdx_x_x("myDiv").innerHTML=xmlhttp.responseText;
}
...... }
xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();当使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面即可:
xmlhttp.open("GET","test1.txt",false);
xmlhttp.send();
document.getElementByIdx_x_x("myDiv").innerHTML=xmlhttp.responseText;如果来自服务器的响应并非 XML,请使用 responseText 属性。
responseText 属性返回字符串形式的响应,因此您可以这样使用:
document.getElementByIdx_x_x("myDiv").innerHTML=xmlhttp.responseText;如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析,请使用 responseXML 属性:
例如:请求 books.xml 文件,其后解析响应的代码是:
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName_r("ARTIST");
for (i=0;i<x.length;i++)
{
txt=txt + x[i].childNodes[0].nodeValue + "<br />";
}
document.getElementByIdx_x_x("myDiv").innerHTML=txt;onreadystatechange 事件
当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。readyState 属性存有 XMLHttpRequest 的状态信息。下面是 XMLHttpRequest 对象的三个重要的属性:
属性 描述 onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 readyState 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
- 0: 请求未初始化
- 1: 服务器连接已建立
- 2: 请求已接收
- 3: 请求处理中
- 4: 请求已完成,且响应已就绪
status 200: "OK"
404: 未找到页面
在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。当 readyState 等于 4 且状态为 200 时,表示响应已就绪:
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementByIdx_x_x("myDiv").innerHTML=xmlhttp.responseText;
}
}注释:onreadystatechange 事件被触发 4 次,对应着 readyState 的每个变化。
页面里存在多个 AJAX 任务, 统一调用一个函数,传入不同参数, 实现同一页面执行多个ajax 任务的方法
如果您的页面里存在多个 AJAX 任务,那么 第一步 您应该为创建 XMLHttpRequest 对象编写一个标准的函数,页面里每个 AJAX 任务都须先调用该函数创建 XMLHttpRequest 对象。
function CreateHTTPObject(){
var xmlhttp;
try
{// code for IE6, IE5
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{ try
{// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) { xmlhttp = false; }
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
try {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
catch (e) { xmlhttp=false; }
}
if (!xmlhttp && window.createRequest) {
try
{ xmlhttp = window.createRequest(); }
catch (e) { xmlhttp=false; }
}
return xmlhttp;
}第二步,写一个xmlhttp.onreadystatechange事件的回调函数:该函数必须传入xmlhttp对象,可自定义其他传入参数:
function ajaxStateChng(xmlhttp, a){
if (xmlhttp.readyState == 4)
{
if (xmlhttp.status == 200)
{
document.getElementByIdx_x_x(a).innerHTML = xmlhttp.responseText;
}
else
{
alert("HTTP 错误,状态码:" + xmlhttp.status);
}
}
else {//显示一个等待响应的图片
document.getElementByIdx_x_x(a).innerHTML = "<img src=tpl/1-0.gif align=absmiddle>";
}
}第三步,写一个执行ajax任务的函数,该函数应该因不同ajax任务传入表示不同 URL的参数, 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同):
function doajax(a){
var xmlhttp = CreateHTTPObject();
if (!xmlhttp) {
return; //无法创建 xmlhttp 对象 }
//Ajax 提交
xmlhttp.open("GET", "ajax_process.aspx?a=" + a, true);
xmlhttp.onreadystatechange = function () { ajaxStateChng(xmlhttp, a); };
xmlhttp.send(null);
}xmlhttp.getAllResponseHeaders();
该函数用来获取响应的所有http头
语法: strValue = oXMLHttpRequest.getAllResponseHeaders();
举例:
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/sample.xml", false);
xmlhttp.send();
alert(xmlhttp.getAllResponseHeaders());
输出由web服务器返回的http头信息,比如:
Server:Microsoft-IIS/5.1
X-Powered-By:ASP.NET
Date:Sat, 07 Jun 2003 23:23:06 GMT
Content-Type:text/xml
Accept-Ranges:bytes
Last Modified:Sat, 06 Jun 2003 17:19:04 GMT
ETag:"a0e2eeba4f2cc31:97f"
Content-Length:9
备注:每个http头名称和值用冒号分割,并以\r\n结束。当send方法完成后才可调用该方法。 - 使用jQuery ajax 访问
先在页面头里加入以下类似语句 <script type="text/javascript" src="js/jquery-1.4.4.min.js">< /script >
jquery-1.4.4.min.js 文件因jquery 版本不同而不同请求 描述 $(selector).load(url,data,callback) 把远程数据加载到被选的元素中, 这个方法不能跨域 $.ajax(options) 把远程数据加载到 XMLHttpRequest 对象中 $.get(url,data,callback,type) 使用 HTTP GET 来加载远程数据 $.post(url,data,callback,type) 使用 HTTP POST 来加载远程数据 $.getJSON(url,data,callback) 使用 HTTP GET 来加载远程 JSON 数据 $.getScript(url,callback) 加载并执行远程的 JavaScript 文件 (url) 被加载的数据的 URL(地址)
(data) 发送到服务器的数据的键/值对象
(callback) 当数据被加载时,所执行的函数
(type) 请求的页面返回的数据的类型 (html,xml,json,jasonp,script,text)
(options) 完整 AJAX 请求的所有键/值对选项1. $(selector).load( url, [ data ], [ complete(responseText, textStatus, XMLHttpRequest) ] ) 把一块 HTML 代码加载到页面的某个区域中去
参数:url (String) : 请求的HTML页的URL地址。
data (Map) : (可选参数) 发送至服务器的 key/value 数据。
complete(responseText, textStatus, XMLHttpRequest) 回调函数: (可选参数) 请求完成时(不管Response的返回状态是不是success)的回调函数。这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。
jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some "。
例如: $('#resultdiv').load("alocal.html #ol"); 这里 #ol 为指定选择符(xpath 语法)示例代码:
$('#resultdiv').load("alocal.html",'', function (responseText, textStatus, XMLHttpRequest){
this;//在这里this指向的是当前的DOM对象,即$('#resultdiv')
alert(responseText);//请求返回的内容
alert(textStatus);//请求状态:success,error
alert(XMLHttpRequest);//XMLHttpRequest对象
});这个方法不能跨域,否则没有返回。比如
$('#resultdiv').load("http://www.cnblogs.com/QLeelulu/archive/2008/03/30/1130270.html");这个函数装入的 文本里含有的script标签里面的语句会执行,但写文档的操作返回无权限操作的提示,如document.write 语句。如果一定要执行,将打开一个新的页面,并将document.write 语句将内容写入新文档。
---------------------------------------------------
2. $.get(url,[data],[success(response,status,xhr)],[dataType]) 返回 jqXHR:使用GET方式来进行异步请求,
参数:url (String) : 发送请求的URL地址.
data (Map) : (可选) 要发送给服务器的数据,以 Key/value 的键值对形式表示,会做为QueryString附加到请求URL中。
success(response,status,xhr) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法, 传入的参数有:
•response - 包含来自请求的结果数据
•status - 包含请求的状态
•xhr - 包含 XMLHttpRequest 对象该函数里,代词this指向调用本次AJAX请求时传递的options参数 如 accepts async timeout type 等
dataType:可选。规定预计的服务器响应的数据类型。默认地,jQuery 将智能判断。
可能的类型:•"xml" •"html" •"text" •"script" •"json" •"jsonp"
提示: 请求的URL地址的页面,如果文件后缀 为 .txt .htm .html .json , 返回的数据均被默认为字符串。当返回的字符串格式 符合 script json xml格式时,定义dataType这个参数值为相应的类型,则返回的数据就不再是简单的字符串, 而是已包装好, 可以直接使用的相关对象。 script类型则直接运行返回数据代表的代码.
请求的URL地址的页面,如果文件后缀 为 .xml .js , 则提不提供dataType这个参数,返回的就是已包装好,可以直接使用XMLDOM对象 或返回后就直接运行的js代码。如果提供这个参数,且返回文本的格式不相符,则出错, 无返回。
这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。示例代码:
$.get("alocal.json", {myAction:"get",myName:"lulu"}, function (data, textStatus){alert(data[1].email); }, "json");
这个语句里, function (data, textStatus) 里的 data 是一个 json 对象。(是alocal.json返回的文本数据经 jscript 自动包装成为一个json 对象,所以可以在函数里直接使用:alert(data[1].email,这里不能跨域$.get("alocal.txt", {myAction:"get",myName:"lulu"}, function (data, textStatus){document.getElementByIdx_x_x("resultdiv").innerHTML=html2str(data); }, "text");
这个语句里, function (data, textStatus) 里的 data 是一个文本字符串。$.get()函数的最后一个可选参数为"html"或"text" 结果是一样的. 返回的都是一个文本字符串。可以使用 .innerHTML 或 .innerText 来接收他. 注意, data 字符串里 script 里的语句是不会执行的. 这里不能跨域$.get("alocal.php", {myAction:"get",myName:"lulu"}, function (data, textStatus){//alert(data[1].email); }, "script");
这个语句里, function (data, textStatus) 里的 data 是一系列可执行语句.(要求alocal.php返回的是符合Javascript语法的 文本字符串。那么, $.get()将在返回成功后立即执行这些语句.这里可以跨域$.get("Http://netoffice/across.php", {myAction:"get",myName:"lulu"}, function (data, textStatus){//alert(data[1].email); }, "script");
$.get("alocaljsonp.php?callback=?", {myAction:"getok",myName:"lulu"}, function (data, textStatus){alert(data.myAction); }, "jsonp");
这个语句里,是jquery jsonp应用的一种。这里可以跨域. 有关这个应用,后面有详述.特别说明, 在<script>标签里, src 属性是可以是跨域地址的, 如:
<script type="text/javascript" src="http://netoffice/across.php"></script>
--------------------------------------
3. $.post( url, [ data ], [ success(data, textStatus, jqXHR) ], [ dataType ] ) 返回 jqXHR
使用POST方式来进行异步请求
参数:url (String) : 发送请求的URL地址.
data (Map) : (可选) 要发送给服务器的数据,以 Key/value 的键值对形式表示。
callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。
dataType (String) : 可选。规定预期的服务器响应返回数据的类型。其规则与上面$.get()相同。示例代码:
$.post('localpost.php', {mypost: 'mypostok',mypost1: 100, mypost2: 'mypostok2'}, function(data) { alert(data);});
显示:var cc= 'okk- local'; alert(cc);
$.post('localpost.php', {mypost: 'mypostok',mypost1: 100, mypost2: 'mypostok2'}, function(data) { alert(data);},"script");
则先 把var cc= 'okk- local'; alert(cc); 作为 script (js 代码) 先运行, 弹出 窗口显示 okk- local , 再运行成功时回调函数, 弹出 窗口显示 var cc= 'okk- local'; alert(cc);
如果返回的是一个json 格式的 字符串, 且第四个参数 type 指定为 "json", 则在回调函数里,传入的data参数是一个包装好的 json 对象, 可以直接这样使用:data.mypost$.post('localpost.php', {mypost: 'mypostok',mypost1: 100, mypost2: 'mypostok2'}, function(data) { alert(data.mypost);},"json"); 弹出 窗口显示 mypostok 如果没有提供这个参数,则data参数就是一个json 格式的 字符串。弹出 窗口显示 {mypost: 'mypostok',mypost1: 100, mypost2: 'mypostok2'},
$.post('a.xml', {mypost: 'mypostok',mypost1: 100, mypost2: 'mypostok2'}, function(data) {
alert(data.documentElement.childNodes(2).childNodes(0).childNodes(0).nodeValue);});
显示:mainc.htm$.post('alocal.json', {mypost: 'mypostok',mypost1: 100, mypost2: 'mypostok2'}, function(data) { alert(data);});
显示
[{"id":1,"name":"local-SomeGuy","email":"example1@example.com"},{"id":2,"name":"local-Person Face","email":"example2@example.com"},{"id":3,"name":"local-Scotty","email":"example3@example.com","0":{"hobbies":["fartings","bikes"]}}]$.post('alocal.json', {mypost: 'mypostok',mypost1: 100, mypost2: 'mypostok2'}, function(data) { alert(data[0].name);}, "json");
显示 : local-SomeGuy
---------------------------------------------
4. $.getJSON( url, [ data ], [ success(data, textStatus, jqXHR) ] ) 返回: jqXHR 用一个HTTP GET请求一个JavaScript JSON数据
参数:•url (String): 装入页面的URL地址。
•data (Map): (可选)发送到服务端的键/值对参数。
•success(data, textStatus, jqXHR): (可选) 当数据装入完成时执行的函数.示例: $.getJSON( "alocaljsonp.php?callback=?", { myAction: "getok", myName: "lulu" }, function(json){ alert("JSON Data: " + json.myAction); });
----------------------------------------------
5. getScript( url, [ success(data, textStatus) ] ) 返回: XMLHttpRequest 通过 GET 方式请求载入并执行一个 JavaScript 文件
参数: url (String) : 待载入 JS 文件地址。
success(data, textStatus): (可选) 成功载入并执行后,再执行的回调函数。
对于load方法,他的回调函数设置了complete回调, 其他的简易ajax方法,比如get,post,getJSON等,他们的回调函数都是设置了success回调。所以,你可以在load的回调里通过textStatus==”success” 或者 textStatus==”error” 来判断是否调用成功。或者用XMLHttpRequest.status 属性判断是200还是404或者其他的。简易ajax方法不会触发error事件,但我们可以设置一个全局的ajaxError来作错误处理。
jquery jsonp应用
在 jquery里 jsonp可有以下几种方式应用:(jsonp应用 都是可以跨域的)
1. $.get("alocaljsonp.php?callback=?", {myAction:"getok",myName:"lulu"}, function (data, textStatus){alert(data.myAction); }, "jsonp");
$.get("Http://netoffice/acrossjsonp.php?mycallback=?", {myAction:"getok",myName:"lulu"}, function (data, textStatus){alert(data.myAction); }, "jsonp");
2. 在页面里先定义好回调函数, 在用下面的方式在页面里使用远程的json对象:
页面里先定义:
<script type="text/javascript" >
function tryjsonp(data)
{alert("fixfname: "+data.myAction);}
</script>
再在页面里这样调用这个函数,参数是远程页面返回的 json 对象:
<script type="text/javascript" src="alocaljsonp.php?myAction=getok&myName=lulu&callback=tryjsonp">
<script type="text/javascript" src="http://netoffice/acrossjsonp.php?myAction=getok&myName=lulu&mycallback=tryjsonp">
3. $.getJSON( "alocaljsonp.php?callback=?", { myAction: "getok", myName: "lulu" }, function(json){ alert("JSON Data: " + json.myAction); });
$.getJSON( "http://netoffice/acrossjsonp.php?mycallback=?", { myAction: "getok", myName: "lulu" }, function(json){ alert("JSON Data: " + json.myAction); });
4.直接 $.ajax()函数。使用JSONP 形式, dataType 设置为"jsonp",默认将在url后面加&callback=?。如 "myurl?callback=?" 。
如果提供了jsonp 参数, 比如指定其值为:'onJSONPLoad' ,则callback=?变为onJSONPLoad=?从jQuery 1.5开始,设置jsonp选项值为false,则会阻止jQuery加入"?callback"字符串到URL或试图使用"=?"转换。在这种情况下,应该明确设置jsonpCallback的值,以提供回调函数名,否则请求不成功,虽然回调函数还会成功执行,但$.ajax()函数会触发error事件并执行相应的函数。例如, { jsonp: false, jsonpCallback: "callbackName" } , 请求的页面也应该返回: callbackName(json对象) 格式文本。如果发请求的页面定义有callbackName函数,但在$.ajax()函数里,只有{ jsonp: false } 则 callbackName函数会执行, 之后就触发error事件并执行相应的函数。
jsonpCallback 参数指定回调函数名,在返回的页面里,直接用这个参数的值作为回调函数名包裹json对象法返回。比如指定其值为:'myJSONPfun' , 则会用已定义好的myJSONPfun函数作为回调函数。和script一样,不会自动缓存结果(默认每次请求都会在url背后加上 "_=[TIMESTAMP]", 除非设置了"cache"参数)。
使用JSONP 形式,请求成功返回后,将立即执行回调函数,然后触发success事件,执行有关函数,同样在该函数里会传入一个json对象供使用, (如同返回的回调函数)
和dataType 设置为"script"一样,使用JSONP 形式的 $.ajax()函数不会自动缓存结果(默认每次请求都会在url背后加上 "_=[TIMESTAMP]", 除非设置了"cache"参数)。
注意事项:
1、 除了第4种方式外,请求地址一定要有一个参数等于回调函数名。 这个参数名叫啥, 随意, 如 jsoncallback, callback, mybackfn , 除了第2种方式,这个参数可以是 =? 比如 callback=? 这代表回调函数名由系统随意指定,返回页面里通过查询传来的这个参数的值, 就可得到回调函数名。
2、$.get(), $.getJSON() 两个函数的第二个参数一定要是json格式键/值对的格式。例:{ "email": "123@163.com"}
3、您请求地址的页面需要返回标准的javascript 函数调用语句:
回调函数名(严格的json格式数据) //末尾无分号
如果格式不对, 就会出现回调函数不会执行的问题。
客户端代码举例:
$.ajax({ url: 'alocaljsonp.php', type: 'GET', dataType: 'jsonp', jsonpCallback: 'tryjsonp', error: function(){ alert('Error loading XML document'); }, success: function(data){ alert(data.myAction);} })
成功返回后,将先执行tryjsonp函数(在页面里先定义), 再执行success: function(xml)函数。若不提供jsonpCallback: 'tryjsonp',则将直接执行success: function(xml)函数。若提供了jsonp参数, 如 jsonp: 'mycallback', 则在请求的页面里,要获取客户端传来的参数mycallback的值作为返回的回调函数名。
请求的页面举例: (php 代码)
<?php
$callback = isset($_GET["callback"])?$_GET["callback"]:"callback";
$array4json-obj = array("aaa"=>$aaa,"aaa2"=>$bbb);
//header('Content-Type: text/javascript; charset=utf8');
//header('Access-Control-Allow-Origin: http://www.example.com/');
//header('Access-Control-Max-Age: 3628800');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
echo $callback . "(". json_encode($array4json-obj). ")";
?>使用 jQuery.ajax([settings])
参数: settings 可选。用于配置 Ajax 请求的键值对集合。格式是 json数据格式 : {key1:value1, key2:value2} , 所有配置都是可选的。
$.ajax()函数可以不带参数调用:$.ajax(); 这里会加载当前页面的内容,但其结果没有。若要使用结果,我们可以实现的回调功能之一。也可以所有的选项都可以通过$.ajaxSetup() 函数来全局设置, 调用时$.ajax() 可以不带任何参数。
该函数 返回: XMLHTTPRequest jQuery VER1.5开始 返回jqXHR 对象。(有关 jqXHR 对象见后述)
$.ajax({ url: 'alocal.xml', type: 'GET', dataType: 'xml', timeout: 1000,
error: function(){
alert('Error loading XML document');
},
success: function(xml){
alert(xml.documentElement.childNodes(1).childNodes(0).childNodes(0).data);
}});
运行结果 弹窗显示mainc.htm
还可以指定 beforeSend、error、success 或者 complete 回调函数,向用户提供更多有关 Ajax 体验的反馈。
此外,还有一些其它的参数可供使用,您可以使用它们设置 Ajax 请求的超时,也可以设置页面 “最近一次修改” 的状态。
$.ajax({ url: 'alocaljson.txt', type: 'GET', timeout: 1000,dataType: 'json',
error: function(){ alert('Error loading XML document'); },
success: function(xml){ // alert(xml); alert(xml[0].name);}});
*.json文件是被当做普通文本文件, 所以, *.txt 与 *.json 是一致的,返回的都是字符串,如果文件里的文本符合json格式,且提供了dataType: 'json'设置,则返回的是一个json对象。如果文件里的文本符合 xml格式, 且提供了dataType: 'xml'设置,则返回的是一个xml对象。若提供了dataType设置,但文本格式不符,则无成功返回且触发error事件。*.xml文件却不一样,默认它返回的是一个xml对象。
$.ajax({ url: 'alocal.xml', type: 'GET', timeout: 1000,
error: function(){ alert('Error loading XML document'); },
success: function(xml){
alert(xml.documentElement.childNodes(1).childNodes(0).childNodes(0).data);}
});
$.ajax({ url: 'restsever/index.php/api/tyds/user/id/1', type: 'GET', error: function(){ alert('Error loading XML document'); },
success: function(data){ alert(data.documentElement.childNodes(3).childNodes(0).nodeValue);} })
$.ajax({ url: 'restsever/index.php/api/tyds/user/id/1/format/json', type: 'GET', error: function(){
alert('Error loading XML document'); },
success: function(data){ alert(data.name);}
})
$.get('http://tempweb/restsever/index.php/api/tyds/user/id/1/format/json', '',function (data, textStatus){alert(data.name); }, "json");当 success 回调函数返回 XML 文档后,您可以使用 jQuery 检索这个 XML 文档,其方式与检索 HTML 文档是一样的。这样使得处理 XML 文档变得相当地容易,并且把内容和数据集成到了您的 Web 站点里面。下面的代码 显示了 success 函数的一个扩展,它为 XML 中的每个 元素都添加了一个列表项到 Web 页面中。
success: function(xml){
$(xml).find('item').each(function(){
var item_text = $(this).text();
$('<li></li>')
.html(item_text)
.appendTo('ol');
});
}$.ajax(options) 函数具体的参数和事件见下表。该函数 1.5版后 把url 单 参数 函数定义为: jQuery.ajax( url [, settings] )
jQuery中 $.ajax(options) 的options
参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址。 type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。 accepts String 这个值在请求头里发送,告诉服务器,他接受的返回数据的类型。和参数dataType选择值一样(默认值根据参数dataType的不同设置而变化。如果要设置修改该值,建议只在函数$.ajaxSetup()中设置修改它。 timeout Number 设置请求超时时间(毫秒)。此设置将覆盖全局设置。 async Boolean (默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。 cache Boolean (默认: true, 数据类型dataType为 'script' 和 'jsonp'时 默认:false) jQuery 1.2 新功能,设置为 false 将不会从浏览器缓存中加载请求信息。 contents(1.5新增) Map 一个以"{字符串:正则表达式}"配对的对象,用来确定jQuery将如何解析响应,给定其内容类型。
例:contents: {script: /javascript|ecmascript/ }contentType String (默认: "application/x-www-form-urlencoded") 发送信息至服务器时内容编码类型。默认值适合大多数应用场合。 context Object 这个对象用于设置Ajax相关回调函数的上下文。也就是说,让回调函数内this指向这个对象(如果不设定这个参数,那么this就指向调用本次AJAX请求时传递的options参数)。比如指定一个DOM元素作为context参数,这样就设置了success回调函数的上下文为这个DOM元素。就像这样: $.ajax({ url: "test.html", context: document.body, success: function(){ $(this).addClass("done"); }});
converters(1.5新增) Map 默认: {"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML} 一个数据类型对数据类型转换器的对象。每个转换器的值是一个函数,返回响应的转化值 属性 值 功能 * text window.String 任意内容转换为字符串 text html true 文本转换为HTML(true表示不需要转换,直接返回) text json jQuery.parseJSON 文本转换为JSON text script function( text ) {
jQuery.globaleval_r( text );
return text;
}
用eval执行text text xml jQuery.parseXML 文本转换为XML 如果在上表示中没有找到对应的转换函数(类型A > 类型B),就再次遍历上表,寻找新的类型C,使得可以 A > C > B。
crossDomain(1.5新增) Boolean 默认: 同域请求为false, 跨域请求为true
上面说过, 使用 XMLHttpRequest 对象的AJAX 访问 在IE8 里,可以跨域访问,但会弹出窗口提示跨域有风险。在FIREFOX9.01 里, 不能跨域使用。
$.ajax() 请求 html,xml,json, text 时, 和 FIREFOX9.01 一样,默认是不允许跨域。如果url是指向另一个域的页面且settings里没有明确设置crossDomain的值, 则请求不成功, 并触发error事件, 执行 error指定的回调函数.
$.ajax() 请求 script,jsonp 时,和html页面里script标签的scr属性一样允许跨域。但只执行返回的代码,没有代码文本返回.
如果你在$.ajax()里明确设置crossDomain的值,则当值是false时,$.ajax()用XMLHttpRequest对象提交请求, 并加上请求头headers[ "X-Requested-With" ] = "XMLHttpRequest"; 告知服务器请求是用XMLHttpRequest方式提交的。该方式若请求成功,回调函数里可用返回的结果. 若请求 script jsonp, 同样会在返回成功时执行返回的代码,同时有可访问的代码文本返回, ( XMLHttpRequest 的属性responseText, responseXML。)
当值是true时,$.ajax()用和html页面里script标签的scr属性一样的方式提交请求,并执行返回的代码或回调函数。与XMLHttpRequest无关,所以没有返回的responseText或 responseXML可用在有关回调函数里。data Object,
String发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。 dataType String 预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作为回调函数参数传递,可用值:
•"xml": 返回 XML 文档,可用 jQuery 处理。
•"html": 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。
•"script": 评估为JavaScript并返回纯文本响应。不会自动缓存结果(默认每次请求都会在url背后加上 "_=[TIMESTAMP]", 除非设置了"cache"参数)。注意:在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)
•"json": 评估为JSON响应,并返回一个JavaScript对象(JSON 数据对象)。可在回调函数里直接使用返回的JSON 数据对象, 如:alert(返回的JSON 数据对象[0].xxx);(见json.org的更多信息,注意必须返回正确的JSON格式。)
•"jsonp": JSONP 格式。使用JSONP 形式调用函数时,默认将在url后面加&callback=?。如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。如果提供了jsonp 参数, 比如指定其值为:'onJSONPLoad' ,则callback=?变为onJSONPLoad=?如果提供了jsonpCallback 参数,比如指定其值为:'myJSONPfun' , 则会用已定义好的myJSONPfun函数作为回调函数。和script一样,不会自动缓存结果(默认每次请求都会在url背后加上 "_=[TIMESTAMP]", 除非设置了"cache"参数)。
•"text": 返回纯文本字符串。global Boolean (默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件,如 ajaxStart 或 ajaxStop 。可用于控制不同的Ajax事件 headers(1.5新增) Map Default: {} 一个额外的"{键:值}"对映射到请求一起发送。此设置被设置之前beforeSend函数已调用;因此,消息头中的值设置可以覆盖beforeSend函数范围内的任何设置。 ifModified Boolean (默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。在jQuery 1.4中,他也会检查服务器指定的'etag'来确定数据没有被修改过。 isLocal(1.5.1新增) Boolean 默认: 取决于当前的位置协议允许当前环境被认定为“本地”,(如文件系统),即使jQuery默认情况下不会承认它。以下协议目前公认为本地:file, *-extension, and widget。如果isLocal设置需要修改,建议在$.ajaxSetup()方法中这样做一次。 jsonp String 在一个jsonp请求中重写回调函数的名字。这个值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,比如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。在jQuery 1.5,,设置jsonp选项为false阻止了jQuery从加入"?callback"字符串的URL或试图使用"=?"转换。在这种情况下,你也应该明确设置jsonpCallback设置。例如, { jsonp: false, jsonpCallback: "callbackName" } jsonpCallback String, Function 为jsonp请求指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。在jQuery 1.5,你也可以使用一个函数来设置该值,在这种情况下jsonpCallback的值为该函数的返回值(其返回的值应该是字符串)。 mimeType(1.5.1新增) String 一个mime类型用来覆盖XHR的 MIME类型。 username String 用于响应HTTP访问认证请求的用户名 password String 用于响应HTTP访问认证请求的密码 scriptCharset String 只有当请求时dataType为"jsonp"或"script",并且type是"GET"才会用于强制修改charset。通常只在本地和远程的内容编码不同时使用。 statusCode(1.5新增) Map 默认: {}
一组数值的HTTP代码和函数对象,当响应时调用了相应的代码。例如,如果响应状态是404,将触发以下警报:
$.ajax({
statusCode: {404: function() {
alert('page not found');
}
});
如果请求成功,状态代码函数和success事件触发的函数一样,会传入相同的参数;如果请求返回错误,状态代码函数和error事件触发的函数一样,传入相同的参数。processData Boolean (默认: true) 默认情况下,发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。 traditional Boolean 如果你想要用传统的方式来序列化数据,那么就设置为true。参考工具分类下面的jQuery.param 方法. xhr Function 他的值是个函数。
调用$.ajax()函数会产生并返回一个xhr对象。一般这个过程是jQuery内部处理的. 但设置这个值(一个重载函数--重载jQuery.ajaxSettings.xhr),
var _super = jQuery.ajaxSettings.xhr,然后在函数里自己操作或修改 _super() 返回的xhr对象,最后把修改后的xhr返回。那么$.ajax()返回的就是这个xhr。通过这个xhr,可以从底层观察和操作这个Ajax请求,比如,可以调用这个对象的方法:xhr.abort() 以在该请求完成前终止该请求。
目前浏览器Firefox 有个bug: 虽然函数 .getResponseHeader('Content-Type') 能返回一个非空字符串, 但函数 .getAllResponseHeaders() 返回的是空字符串。而且,在jQuery里自动解码JSON CORS 类型请求的返回内容也是不支持的。一个较好的解决方法,就要用到这个设置:用下面的代码重载 jQuery.ajaxSettings.xhr函数:
var _super = jQuery.ajaxSettings.xhr;
jQuery.ajaxSettings.xhr = function () {
var xhr = _super(),
getAllResponseHeaders = xhr.getAllResponseHeaders;
xhr.getAllResponseHeaders = function () {
if ( getAllResponseHeaders() ) {
return getAllResponseHeaders();
}
var allHeaders = "";
$( ["Cache-Control", "Content-Language", "Content-Type",
"Expires", "Last-Modified", "Pragma"] ).each(function (i, header_name) {
if ( xhr.getResponseHeader( header_name ) ) {
allHeaders += header_name + ": " + xhr.getResponseHeader( header_name ) + "\n";
}
return allHeaders;
});
};
return xhr;
};
jQuery中Ajax会触发很多事件。有两种事件,一种是局部事件,一种是全局事件:局部事件:通过$.ajax来调用并且分配。
全局事件,可以用bind来绑定,用unbind来取消绑定。这个跟click/mousedown/keyup等事件类似。但他可以传递到每一个DOM元素上。
$("#loading").bind("ajaxSend", function(){ //使用bind
$(this).show();
});
$("#loading").ajaxComplete(function(){ //直接使用ajaxComplete
$(this).hide();
});
当然,你某一个Ajax请求不希望产生全局的事件,则可以设置global:false
$.ajax({ url: "test.html", global: false, // ... });
下表按事件顺序列出:各事件触发的函数 这里 我们叫该事件的回调函数
参数名 类型 描述 ajaxStart 全局事件 开始新的Ajax请求,并且此时没有其他ajax请求正在进行。该事件无任何参数传入回调函数 beforeSend 局部事件 可使用该事件在发送请求前修改 XMLHttpRequest 对象,如添加自定义 HTTP 头。该事件把XMLHttpRequest 对象和调用这个ajax的时候的参数settings传入回调函数。这是一个 Ajax 事件。如果返回 false 可以取消本次 ajax 请求。从 jQuery 1.5开始,不论什么请求类型, 都会触发该事件. function (XMLHttpRequest, ajaxsettings ) {
this; // the options for this ajax request
}ajaxSend 全局事件 请求开始前触发的全局事件。在IE8.0里, 该事件不会触发,FireFox9.0里会触发 error 局部事件 仅当发生错误时触发。你无法同时执行success和error两个回调函数。 (默认: 自动判断 (xml 或 html)) 请求失败时将调用此方法。这个方法有三个参数:XMLHttpRequest 对象,错误信息,(可能)捕获的错误对象。
如果发生了错误,错误信息(第二个参数)除了得到null之外,还可能是"timeout", "error", "abort" 和 "parsererror"。这是一个 Ajax Event。 在jQuery 1.5, 在error设置可以接受函数组成的数组。每个函数将被依次调用。 注意:此处理程序不被跨域脚本和JSONP形式的请求调用。
function (XMLHttpRequest, textStatus, errorThrown) {
// 通常情况下textStatus和errorThown只有其中一个有值
this; // the options for this ajax request
}ajaxError 全局事件 全局的发生错误时触发 ajaxError(function(event,xhr,options,exc))
•event - 包含 event 对象
•xhr - 包含 XMLHttpRequest 对象
•options - 包含 AJAX 请求中使用的选项
•exc - 包含 JavaScript exceptiondataFilter(data, type) 局部事件 在请求成功之后调用。传入返回的数据以及dataType参数的值。并且必须返回新的数据(可能是处理过的)传递给success回调函数。 success 局部事件 请求成功后触发,其回调函数有两个参数:服务器返回数据,返回状态
function (data, textStatus) {
// data could be xmlDoc, jsonObj, html, text, etc...
this;
// the options for this ajax request
}ajaxSuccess 全局事件 全局的请求成功时触发, complete 局部事件 请求完成后回调函数 ( 请求成功或失败时均调用, 即便是同步请求,你都能在请求完成时触发这个事件。)。两个参数: XMLHttpRequest 对象,一个代表请求状态的字符串,以下值之一("success", "notmodified", "error", "timeout", "abort", or "parsererror")
function (XMLHttpRequest, textStatus) {
this;
// the options for this ajax request
}ajaxComplete 全局事件 全局的请求完成时触发 ajaxStop 全局事件 当没有Ajax正在进行中的时候,触发。 当开始一个 jquery的 ajax请求,不管使用 $.ajax()还是 get/post/load/getScript/getJSON等方法 ,都会触发上述全局事件(ajaxSend事件在IE8.0里不会触发,FireFox9.0里会触发)。除了ajaxStart和ajaxStop之外,其他的事件都有3个参数:event, XMLHttpRequest, ajaxOptions. 第一个是事件,第二个是XHR对象,第三个参数最有用,是当时调用这个ajax的时候的参数。对于ajaxError,还有第四个参数thrownError,只有当异常发生时才会被传递。上述全局事件在代码里的使用, 等同于 $("xx").click(function(){}) 这种语法方式使用。
比如我们可以利用ajaxOptions来写一个全局的ajax事件。
$("#msg").ajaxSend(function(e,xhr,o) {
$(this).html("正在请求"+o.url);
});
这个例子使我们就可以很方便的全局地在某个地方显示当前的ajax状态。因为第三个参数实际上是传递给ajax的参数。所以ajaxOptions.url属性总是有效的。
还有更丰富的例子。
如果你用ajax调用,还可以传递自定义参数。下面的例子我就自定义了一个msg参数给了ajax调用
//自定义参数msg
$.ajax({url:"test1.html",type:"get",msg:"页面一"});
$.ajax({url:"test2.html",type:"get",msg:"页面二"});
$.ajax({url:"test3.html",type:"get",msg:"页面三"});
$.ajax({url:"test4.html",type:"get",msg:"页面四"});
//这里就能获取到自定义参数msg。
//这可以用来区别对待不同的ajax请求。
$("#msg").ajaxSend(function(e,xhr,o) {
$(this).html("正在请求"+o.msg);
}).ajaxSuccess(function(e,xhr,o) {
$(this).html(o.msg+"请求成功");
}).ajaxError(function(e,xhr,o) {
$(this).html(o.msg+"请求失败");
});
一个在页面里绑定ajax任务的例子:
<script type="text/javascript">
$(function(){
// Bind a click event to the 'ajax' object id
$("#ajax").bind("click", function( evt ){
// Javascript needs totake over. So stop the browser from redirecting the page
evt.preventDefault();
// AJAX request to get the data
$.ajax({
// URL from the link that was clicked on
url: $(this).attr("href"),
// Success function. the 'data' parameter is an array of objects that can be looped over
success: function(data, textStatus, jqXHR){
alert('Successful AJAX request!');
},
// Failed to load request. This could be caused by any number of problems like server issues, bad links, etc.
error: function(jqXHR, textStatus, errorThrown){
alert('Oh no! A problem with the AJAX request!');
}
});
});
});
</script>jqXHR 对象
jqXHR 这是一个 XMLHTTPRequest对象的jQuery扩展加强版, 拥有XMLHTTPRequest的所有属性,方法,事件。同时拥有jQuery的特有属性和方法。
在jQuery 1.5.1后, jqXHR对象包含了overrideMimeType方法。他一般在beforeSend事件回电函数里调用。比如:
$.ajax({
url: 'http://fiddle.jshell.net/favicon.png',
beforeSend: function( xhr ) {
xhr.overrideMimeType( 'text/plain; charset=x-user-defined' );
},
success:function( data ) {... }
});
jqXHR是一个deferred对象(jquery 自有的一种对象类型)。 提供.error() .success()和.complete()方法。(提示: jqXHR.success(), jqXHR.error(), 和 jqXHR.complete() 在 jQuery 1.8后 将叫做. jqXHR.done(), jqXHR.fail(), and jqXHR.always() )这些方法在$.ajax()请求终止后调用执行。他们接收的参数和$.ajax()有关事件的回调函数接收的参数相同。在jQuery 1.5不仅允许你指定一个请求的多个回调,甚至允许在请求完成后设置回调函数(如果请求已经完成,回调函数立即触发)。
代码举例:即使已在 $.ajax({...}) 里已写有关事件触发时调用的回调函数 也可:
var jqxhr = $.ajax( "example.php" )
.done(function() { alert("success"); })
.fail(function() { alert("error"); })
.always(function() { alert("complete"); });
可写多次done() .fail()和.always()方法, 他们会按定义先后执行
jqxhr.always(function() { alert("second complete"); });
代码 接收$.ajax({...})返回的 jqxhr 对象, 并用 链式写法 写 done() .fail()和.always()方法,参数是一个函数定义。这些函数接收的参数和$.ajax({...})有关事件的回调函数接收的参数相同。代码里,没用到该参数。
为了兼容XMLHttpRequest ,jqXHR对象拥有下列属性和方法:readyState status statusText responseXML responseText
setRequestHeader(name, value) getAllResponseHeaders() getResponseHeader() abort()
对象不提供onreadystatechange机制,但有success , error , complete和status就可满足多数要求。
在回调函数里 this 代词指向这个Ajax()的参数 settings 对象,如果在settings里指定了context选项,则在所有回调函数里 this 代词指向context选项值代表的对象
某些类型Ajax的请求,如JSONP形式和跨域的GET请求,请不要使用XHR;在这些情况下XMLHttpRequest和textStatus参数传递给回调是undefined 。
三. php
- file_get_contents访问一个受密码保护的RESTful, 密码保护类型是 'basic',echo函数返回结果
(密码保护类型是 'digest'的, 不适合用这种方式访问)
<?php
require_once("tcurl/tydscurlext.php");
$resp = json_decode(file_get_contents('http://luhd:123456@tempweb/restsever/api/tyds/send/format/json'));
echo $resp->mymethod;
echo '<br>'.$resp->mynote;
?>
显示的结果:
from-send-get
get it. very ok - 直接用 php curl 访问, 请详细参见php 手册
- 在普通php内 使用REST Client类库访问
GET: <?php $myconfig = array('http_auth' => 'basic', 'http_user' => 'luhd', 'http_pass' => '123456');
$mycurl = new TydsCurlExt( $myconfig);
// $mycurl = new TydsCurlExt();
$resp =$mycurl ->get('http://tempweb/restsever/api/tyds/send','',"json");
echo $resp;
?>显示结果:
{"tydsxml":{"mymethod":"from-send-get","mynote":"get it. very ok"}}
POST: <?php
$dataarray = array('y1' => 'lu', 'y2' => 'wy', 'y3' => 'jh');
// $mycurl = new TydsCurlExt( $myconfig);
// $mycurl = new TydsCurlExt();
$resp =$mycurl ->post('http://tempweb/restsever/api/tyds/send',$dataarray,"json");
echo $resp;
?>显示结果:
{"tydsxml":{"py1":"lu","py2":"wy","py3":"jh"}}
PUT: <?php
// $mycurl = new TydsCurlExt( $myconfig);
// $mycurl = new TydsCurlExt();
$resp =$mycurl ->put('http://tempweb/restsever/api/tyds/send',$dataarray,"json");
echo $resp;
?>显示结果:
{"tydsxml":{"puy1":"lu","puy2":"wy","puy3":"jh"}}
DELETE: <?php // $mycurl = new TydsCurlExt( $myconfig); // $mycurl = new TydsCurlExt(); $resp =$mycurl ->delete('http://tempweb/restsever/api/tyds/send',$dataarray,"json"); echo $resp; ?>显示结果:
{"tydsxml":{"dy1":"lu","dy2":"wy","dy3":"jh"}} - 访问普通网页源文件: (html css xxx.js)
<php
// $mycurl = new TydsCurlExt( $myconfig);
$lmycurl = new TydsCurlExt();
$resp =$lmycurl ->get('http://tempweb/tcurl/a1.html');
echo $resp;
$resp =$lmycurl ->get('http://tempweb/tcurl/sample.js');
echo $resp;
?>
返回的text, html:
yyiio 你们好//表格奇偶背景(鼠标移上效果)////// $(function() {//定义函数 $('.rbox_list table tr').hover( function(){ $(this).addClass("tr_hover"); $(this).removeClass("tr_off"); }, function(){ $(this).addClass("tr_off"); $(this).removeClass("tr_hover"); } ); }); - 在RESTful内 使用REST Client类库访问 密码保护类型是 'basic'
restsever/Clientinrestserver/getsend - 在RESTful内 使用REST Client类库访问 密码保护类型是 'digest'
restsever/Clientinrestserver/getdigestf
REST Server --controllers里的有关文件:
<?php
class Clientinrestserver extends CI_Controller {
function __construct()
{
parent::__construct();
}
public function getsend()
{$this->load->library("restcurl", array("server" => "http://tempweb/restsever/api/tyds", "http_user" => "luhd", "http_pass" => "123456", "http_auth" => "basic"));
$restr = $this->restcurl->get("send", array(), "xml");
echo var_dump($restr);
}
public function getdigestf()
{$this->load->library("restcurl", array("server" => "http://tempweb/restsever/api/tyds", "http_user" => "luhd", "http_pass" => "123456", "http_auth" => "digest"));
$restr = $this->restcurl->get("digestf", array(), "xml");
echo var_dump($restr);
}
}
?>