❶ ajax與json數據獲取方法,搞了好久沒搞出來
你好,我看了你的代碼,你前端使用json格式接收數據,但是你的伺服器端輸出的格式好像不是json格式啊,我是做php的,我做交互數據,都要將數據格式化,轉化成json格式再輸送到前端的。
❷ 如何用ajax讀取json數據
首先採用jquery內部封裝好的方法是比較簡單的,我們只需做的就是修改裡面的一些配置: 以下代碼是對$.ajax()的解析: $.ajax({ type: "POST", //提交方式 contentType: "application/json; charset=utf-8"
❸ AJAX跨域請求之JSONP獲取JSON數據
Asynchronous
JavaScript
and
XML
(Ajax
)
是驅動新一代
Web
站點(流行術語為
Web
2.0
站點)的關鍵技術。Ajax
允許在不幹擾
Web
應用程序的顯示和行為的情況下在後台進行數據檢索。使用
XMLHttpRequest
函數獲取數據,它是一種
API,允許客戶端
JavaScript
通過
HTTP
連接到遠程伺服器。Ajax
也是許多
mashup
的驅動力,它可將來自多個地方的內容集成為單一
Web
應用程序。
不過,由於受到瀏覽器的限制,該方法不允許跨域通信。如果嘗試從不同的域請求數據,會出現安全錯誤。如果能控制數
據駐留的遠程伺服器並且每個請求都前往同一域,就可以避免這些安全錯誤。但是,如果僅停留在自己的伺服器上,Web
應用程序還有什麼用處呢?如果需要從多個第三方伺服器收集數據時,又該怎麼辦?
理解同源策略限制
同源策略阻止從一個域上載入的腳本獲取或操作另一個域上的文檔屬性。也就是說,受到請求的
URL
的域必須與當前
Web
頁面的域相同。這意味著瀏覽器隔離來自不同源的內容,以防止它們之間的操作。這個瀏覽器策略很舊,從
Netscape
Navigator
2.0
版本開始就存在。
克服該限制的一個相對簡單的方法是讓
Web
頁面向它源自的
Web
伺服器請求數據,並且讓
Web
伺服器像代理一樣將請求轉發給真正的第三方伺服器。盡管該技術獲得了普遍使用,但它是不可伸縮的。另一種方式是使用框架要素在當前
Web
頁面中創建新區域,並且使用
GET
請求獲取任何第三方資源。不過,獲取資源後,框架中的內容會受到同源策略的限制。
克服該限制更理想方法是在
Web
頁面中插入動態腳本元素,該頁面源指向其他域中的服務
URL
並且在自身腳本中獲取數據。腳本載入時它開始執行。該方法是可行的,因為同源策略不阻止動態腳本插入,並且將腳本看作是從提供
Web
頁面的域上載入的。但如果該腳本嘗試從另一個域上載入文檔,就不會成功。幸運的是,通過添加
JavaScript
Object
Notation
(JSON)
可以改進該技術。
1、什麼是JSONP?
要了解JSONP,不得不提一下JSON,那麼什麼是JSON
?
JSON
is
a
subset
of
the
object
literal
notation
of
JavaScript.
Since
JSON
is
a
subset
of
JavaScript,
it
can
be
used
in
the
language
with
no
muss
or
fuss.
JSONP(JSON
with
Padding)是一個非官方的協議,它允許在伺服器端集成Script
tags返回至客戶端,通過javascript
callback的形式實現跨域訪問(這僅僅是JSONP簡單的實現形式)。
2、JSONP有什麼用?
由於同源策略的限制,XmlHttpRequest只允許請求當前源(域名、協議、埠)的資源,為了實現跨域請求,可以通過script標簽實現跨域請求,然後在服務端輸出JSON數據並執行回調函數,從而解決了跨域的數據請求。
3、如何使用JSONP?
下邊這一DEMO實際上是JSONP的簡單表現形式,在客戶端聲明回調函數之後,客戶端通過script標簽向伺服器跨域請求數據,然後服務端返回相應的數據並動態執行回調函數。
HTML代碼
(任一
):
<meta
content="text/html;
charset=utf-8"
http-equiv="Content-Type"
/>
<script
type="text/javascript">
function
jsonpCallback(result)
{
//alert(result);
for(var
i
in
result)
{
alert(i+":"+result[i]);//循環輸出a:1,b:2,etc.
}
}
var
JSONP=document.createElement("script");
JSONP.type="text/javascript";
JSONP.src="http://crossdomain.com/services.php?callback=jsonpCallback";
document.getElementsByTagName("head")[0].appendChild(JSONP);
</script>
或者
Html代碼
<meta
content="text/html;
charset=utf-8"
http-equiv="Content-Type"
/>
<script
type="text/javascript">
function
jsonpCallback(result)
{
alert(result.a);
alert(result.b);
alert(result.c);
for(var
i
in
result)
{
alert(i+":"+result[i]);//循環輸出a:1,b:2,etc.
}
}
</script>
<script
type="text/javascript"
src="http://crossdomain.com/services.php?callback=jsonpCallback"></script>
JavaScript的鏈接,必須在function的下面。
服務端PHP代碼
(services.php):
<?php
//服務端返回JSON數據
$arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
$result=json_encode($arr);
//echo
$_GET['callback'].'("Hello,World!")';
//echo
$_GET['callback']."($result)";
//動態執行回調函數
$callback=$_GET['callback'];
echo
$callback."($result)";
如果將上述JS客戶端代碼用jQuery的方法來實現,也非常簡單。
$.getJSON
$.ajax
$.get
客戶端JS代碼在jQuery中的實現方式1:
Js代碼
<script
type="text/javascript"
src="jquery.js"></script>
<script
type="text/javascript">
$.getJSON("http://crossdomain.com/services.php?callback=?",
function(result)
{
for(var
i
in
result)
{
alert(i+":"+result[i]);//循環輸出a:1,b:2,etc.
}
});
</script>
客戶端JS代碼在jQuery中的實現方式2:
Js代碼
<script
type="text/javascript"
src="jquery.js"></script>
<script
type="text/javascript">
$.ajax({
url:"http://crossdomain.com/services.php",
dataType:'jsonp',
data:'',
jsonp:'callback',
success:function(result)
{
for(var
i
in
result)
{
alert(i+":"+result[i]);//循環輸出a:1,b:2,etc.
}
},
timeout:3000
});
</script>
客戶端JS代碼在jQuery中的實現方式3:
Js代碼
<script
type="text/javascript"
src="jquery.js"></script>
<script
type="text/javascript">
$.get('http://crossdomain.com/services.php?callback=?',
{name:
encodeURIComponent('tester')},
function
(json)
{
for(var
i
in
json)
alert(i+":"+json[i]);
},
'jsonp');
</script>
其中
jsonCallback
是客戶端注冊的,獲取
跨域伺服器
上的json數據
後,回調的函數。
http://crossdomain.com/services.php?callback=jsonpCallback
這個
url
是跨域服務
器取
json
數據的介面,參數為回調函數的名字,返回的格式為
Js代碼
jsonpCallback({msg:'this
is
json
data'})
Jsonp原理:
首先在客戶端注冊一個callback,
然後把callback的名字傳給伺服器。
此時,伺服器先生成
json
數據。
然後以
javascript
語法的方式,生成一個function
,
function
名字就是傳遞上來的參數
jsonp.
最後將
json
數據直接以入參的方式,放置到
function
中,這樣就生成了一段
js
語法的文檔,返回給客戶端。
客戶端瀏覽器,解析script標簽,並執行返回的
javascript
文檔,此時數據作為參數,傳入到了客戶端預先定義好的
callback
函數里.(動態執行回調函數)
使用JSON的優點在於:
比XML輕了很多,沒有那麼多冗餘的東西。
JSON也是具有很好的可讀性的,但是通常返回的都是壓縮過後的。不像XML這樣的瀏覽器可以直接顯示,瀏覽器對於JSON的格式化的顯示就需要藉助一些插件了。
在JavaScript中處理JSON很簡單。
其他語言例如PHP對於JSON的支持也不錯。
JSON也有一些劣勢:
JSON在服務端語言的支持不像XML那麼廣泛,不過JSON.org上提供很多語言的庫。
如果你使用eval()來解析的話,會容易出現安全問題。
盡管如此,JSON的優點還是很明顯的。他是Ajax數據交互的很理想的數據格式。
主要提示:
JSONP
是構建
mashup
的強大技術,但不幸的是,它並不是所有跨域通信需求的萬靈葯。它有一些缺陷,在提交開發資源之前必須認真考慮它們。
第一,也是最重要的一點,沒有關於
JSONP
調用的錯誤處理。如果動態腳本插入有效,就執行調用;如果無效,就靜默失敗。失敗是沒有任何提示的。例如,不能從伺服器捕捉到
404
錯誤,也不能取消或重新開始請求。不過,等待一段時間還沒有響應的話,就不用理它了。(未來的
jQuery
版本可能有終止
JSONP
請求的特性)。
JSONP
的另一個主要缺陷是被不信任的服務使用時會很危險。因為
JSONP
服務返回打包在函數調用中的
JSON
響應,而函數調用是由瀏覽器執行的,這使宿主
Web
應用程序更容易受到各類攻擊。如果打算使用
JSONP
服務,了解它能造成的威脅非常重要。
❹ ajax怎麼獲取返回的json數據
首先要明白ajax的基本格式,參考下面的內容,可以發現,success是請求成功後伺服器返回的數據,接收只需要把回調函數的值處理就可以了,如:
response:即為伺服器返回的數據,例如:{"uid":123,"name":"jghdream"},
如下輸出即可:
....
success:function(response){
console.log(response.uid);
console.log(response.name);
}
.....
以下是ajax的一些參數:
$.ajax({
type:'post',
url:'/testajax.php',
dataType:'json',
data:{uid:uid,rands:Math.random()},
success:function(){
alert('ajaxreturnsuccess');
}});
url,類型:String,默認值: 當前頁地址。發送請求的地址
data,類型:String,發送到伺服器的數據。將自動轉換為請求字元串格式。GET 請求中將附加在 URL 後。查看 processData 選項說明以禁止此自動轉換。必須為 Key/Value 格式。如果為數組,jQuery 將自動為不同值對應同一個名稱。如 {foo:["bar1", "bar2"]} 轉換為 '&foo=bar1&foo=bar2'
dataType,類型:String,預期伺服器返回的數據類型。如果不指定,jQuery 將自動根據 HTTP 包 MIME 信息來智能判斷,比如 XML MIME 類型就被識別為 XML。在 1.4 中,JSON 就會生成一個 JavaScript 對象,而 script 則會執行這個腳本。隨後伺服器端返回的數據會根據這個值解析後,傳遞給回調函數。可用值:
"xml": 返回 XML 文檔,可用 jQuery 處理。
"html": 返回純文本 HTML 信息;包含的 script 標簽會在插入 dom 時執行。
"script": 返回純文本 JavaScript 代碼。不會自動緩存結果。除非設置了 "cache" 參數。注意:在遠程請求時(不在同一個域下),所有 POST 請求都將轉為 GET 請求。(因為將使用 DOM 的 script標簽來載入)
"json": 返回 JSON 數據 。
"jsonp": JSONP 格式。使用 JSONP 形式調用函數時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函數名,以執行回調函數。
"text": 返回純文本字元串
success,當請求之後調用。傳入返回後的數據,以及包含成功代碼的字元串。
❺ AJAX 怎麼獲取JSON中的指定數據
假設你從ajax獲取字元串為 ajaxString,則可以這樣獲取ID:
var jsonData = JSON.parse(ajaxString);
var id = jsonData.result.ID;
❻ 如何取出 ajax返回的json數據
vartemp="";
$.ajax({
url:"",
async:false,//同步
success:function(data){
//$("#show1").html(data);//當async:true時是「非同步」,只能在回調函數中獲取值
temp=data;//當async:false時是「同步」,此時外面才能獲取到回調函數中的值}
//array=data;
})
//如果data是json,可以使用
vararray=newArray();
❼ 怎麼通過ajax從後台獲取json數據
1.第一步:創建非同步對象
var xhr=new XMLHttpRequest ();//創建一個非同步對象。
上面創建非同步對象的方法非IE瀏覽器都支持。IE7以上也支持。
2.第二步:創建http請求(只是打開和url的連接,並不會發送請求。)
var xhr=new XMLHttpRequest();
xhr.open("get","介面的地址","true");
//參數一:發送請求的方式:方式分別有post和get
//參數二:請求地址
//參數三:是否是非同步提交true:非同步,flase:同步提交
//如果使用post請求需要為post請求設置一個請求頭(必須在發送數據之前)設置方法如下:
//xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
3.第三步:發送數據(get和post發送數據的方式不相同)
var xhr=new XMLHttpRequest ();//創建一個非同步對象。
xhr.open("get","介面地址?name=zhangsan","true");
//在發送數據上需要注意的是get和post的發送方式
//get:數據需要拼接到open方法裡面的URL地址里格式為URL?數據。(注意:get方式也還是需要調用send方法如不調用數據將不會發送)
//post:數據直接寫到send方法里即可如下:
// xhr.send("name=zhangsan");
4.第四步:設置監聽請求狀態的回調函數
請求狀態分為5步:
0.未初始化:非同步對象創建出來但是還沒有打開連接,(即未調用open方法)
1.已初始化:非同步對象已經創建並且打開了連接(調用了open方法),但是還沒有發送請求(未調用end方法)
2.已發送數據:已經調用了send方法,但web伺服器響應還未返回
3.正在接收:web伺服器接收完數據並且處理完畢後,向客戶端發送響應結果
4.接收完畢:當web伺服器響應的數據全部接收完畢
以上序號對應readyState的值
完整的是這樣:
var xhr=new XMLHttpRequest ();//創建一個非同步對象。
xhr.open("get","介面地址","true");
//下面的回調函數是會動態監聽請求狀態
xhr.onreadystatechange=function(){
//readyState屬性會記錄下5種請求狀態
if(xhr.readyState == 4){
alert("web伺服器響應的數據全部接收完畢")
}
}
❽ ajax怎麼取出json數據
你好,用遍歷的方式取出data中的數據進行操作:
$.each(data,function(n,value){
alert(value.x+'---'+value.y);
});
❾ Ajax怎麼獲取Json數據
$("a").click(function(){
$.ajax({
type:"get",
url:"test1.json",
dataType:"json",
success:function(response,status,xhr){
for(varpinresponse){
varli=$("<li>"+p+"</li>"),
arr=response[p];
varul=$("<ul>");
li.append(ul);
for(vari=0;i<arr.length;i++){
varlii=$("<li>");
varobj=arr[i];
for(varkinobj){
lii.append("<div>"+k+":"+obj[k]+"</div>");
}
ul.append(lii);
}
$("ul").append(li);
}
});
});
});
❿ 如何使用ajax讀取Json中的數據
<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8"/>
<title>HTML5學堂</title>
</head>
<body>
<divid="h5course">學習HTML5,到HTML5學堂</div>
<scriptsrc="js/jquery-3.2.1.min.js"type="text/javascript"></script>
<scripttype="text/javascript">
$.ajax({
//json的路徑根據你那邊來修改
url:'json/h5course.json',
})
.done(function(data){
//在這里輸出獲取到的數據
console.log(data);
})
.fail(function(){
console.log("error");
})
</script>
</body>
</html>