1.目的:用asp得到json物件:
,,,,,,,,,,,,,,,,]}
這是我們將得到的json資料。
2.需要引用的檔案
後台需要引入json類檔案: json.asp ,
3.後台程式**:(關鍵的來了)
index_json.asp 頁面**:
dim sql_class,sql_top,sql_colums,sql_whereby,sql_orderby
sql_class = request.item("sql_class")
sql_top = request.item("sql_top")
sql_colums = request.item("sql_colums")
sql_whereby = request.item("sql_whereby")
sql_orderby = request.item("sql_orderby")
sql="select "&sql_top&" "&sql_colums&" from "&sql_class&" where 1=1 "&sql_whereby&" "&sql_orderby
%>
set rs = server.createobject("adodb.recordset")
rs.open sql,conn,1,3
jsonstr = ""
rows = ""
dim i,json_rows,json_ret,arr_rows
dim myarray()
redim myarray(rs.recordcount-1) '將陣列大小重新定義為20
set jsonobj=new json
jsonobj.toresponse=false
set json_ret = server.createobject("scripting.dictionary")
for i=0 to rs.recordcount-1
set myarray(i) = server.createobject("scripting.dictionary")
for each e in rs.fields
'rows = rows &""""& e.name & """:""" & replace(e.value,chr(34),"@_'_@") & ""","
myarray(i).add e.name,e.value '將key/value加到行陣列物件中
next
rs.movenext
next
json_ret.add "total",rs.recordcount
json_ret.add "rows",myarray
jsonstr = jsonobj.tojson(empty,json_ret,false)
response.write jsonstr
%>
上面的**是將資料庫中的資料取出來並將資料儲存為json物件,這裡面用到了 dictionary ,目前還沒有別的辦法生成多層級的json資料,只能用它來生成了。 有人說我可以將資料庫的資料取出來然後拼接成json資料格式。 對,沒錯,我也嘗試過,但是你會發現,它生成的永遠都是string字串,不是物件,非同步獲取json格式或者將這個資料傳給一些外掛程式的時候你會發現你怎麼也得不到想要的結果,原因就在於格式不正確,你得到的是json string,不是json object。 那又有人說了,我可以在非同步獲取到這個json string之後再將該資料用eval方法轉成json物件,對,沒錯,是可以。 弊端是有的,而且你會發現很頭疼的。 這個問題在稍後的文章裡面我會再來解釋。
4.接下來我們要做的就是將生成的json物件資料非同步獲取並顯示到前台的dom中,看一下demo:
檔名 ajaxshow.html
asp生成json物件並非同步獲取json物件資料 例項以下將顯示非同步獲取的內容:
檔案的引用和css我就不說了。關鍵在於ajax部分,這裡我用的是jquery中的$.post()方法,有2出關鍵點: 第一, url ,相信這個大家都會寫對吧,就是你請求的資料來源頁面,我們的例子中為剛才我們建立的 ajax_index.asp; 第二, 'json',這個引數大家可以查一下jquery關於ajax非同步獲取部分的手冊。該引數就是為了保證生成的資料為json物件。
其中你會發現
json.stringify(data)
這個就是json2.js json類檔案中的方法,該方法就是將json物件轉為string型別,以便將結果顯示到dom裡面。 執行一下http://localhost:701/ajaxshow.html,是不是已經得到了我們想要的資料。
這是我們全部的資料,當然我們怎麼知道我們獲取的是json物件呢,只需要試試data.total能不能獲取到就知道了啦;我們改一下$.post()中的**:
//$('#ajax_data').html(json.stringify(data));
var total = data.total;
$('#ajax_data').html(total);
在重新整理一下看看,是不是得到了 17;
關於json物件的深拷貝
前兩天寫程式,有乙個是對後台返回的json資料進行整理然後再使用,用到了關於json 的拷貝。我在我的一篇部落格中提到過對陣列的拷貝。分為深度拷貝,和淺拷貝。這裡附上鏈結 其實對於陣列的拷貝是比較簡單的,大不了就自己迴圈一下,然後放到乙個新陣列中,或者是在我部落格中提到的使用 slice 0 的辦法...
格式化輸出Json物件
1.呼叫方式 alert jsonuti.converttostring jsonobj jsonobj為json物件。2.格式化輸出json物件方法定義 var jsonuti 寫物件 writeobj function obj 物件 level 層次 基數為1 isinarray 為普通型別,直...
關於 json物件合併問題
物件的合併 需求 設有物件 o1 o2,需要得到物件 o3 varo1 o2 則 varo3 方法1 使用jquery的extend方法 方法定義 jquery.extend deep target,object1,objectn 用乙個或多個其他物件來擴充套件乙個物件,返回被擴充套件的物件。如果不...