在做web服務的時候,如果你能同時控制服務器和客戶端,返回的數據你可以自己定義,這是最理想的模式,但有時,你控制不了或只能控制服務器的一部分數據的時候,問題就來了:你不能按照你想要的格式如json或XML返回,每個網頁都已經被服務器定義好了返回的html,你只能在其中插入數據。
我在做一個嵌入式設備的時候就碰到了這樣的問題,我必須使用內嵌的web服務器,它里面代碼比較原始,全部由CGI直接返回html的數據,我想把jquery放到里面以提高前端的顯示效率,但我只能把我的數據添加到web服務器,當然也可以自己去改web服務器,但代價太高,我只想從返回的html中抽出我需要處理的數據,略過其他數據,而且不能影響到返回的數據在其他位置的顯示,所以偷懶使用了下面的辦法,我知道也許有更好的辦法,但google 沒找到合適的。如有更好的辦法,請回復下!
1)在服務器端把你的返回數據用ID做標記,例如,你本來返回的是一個ip地址,把它改寫成這樣:
webresult("<div id=myip>ip</div>")
(原來的做法:webresult(“ip”))
2) 寫一個函數取得自己的數據
下面是一個例子:
/* get server status function * author: Seabird */ function getConnectStatus() { $.ajax({ type:“GET” url:“/XXXXX /getConnectStatus", dataType:"html", success:function(data) { var $msg1 = $(data); var sta = $msg1.filter("#status").html(); if (sta !== "NO") { $("#connect").show(); var staArry = "<tr><td>" + $msg1.filter("#userid").html() + "< /td>" + "<td>" + $msg1.filter("#role").html() + "< /td>" + "<td>" + $msg1.filter("#from").html() + " </td>" + "<td>" + $msg1.filter("#connect").html() + "</td></tr>"; $("#result").append(staArry); } else {$("#connect").hide(); } } }); }
3)注意紅色的代碼,那個#status是服務器返回的,不是客戶端的,下面是服務器返回的格式:
..... if (connected) { webresult("<div id=status>connected</div>"); webresult("<div id=userid>123456</div>"); webresult("<div id=role>Client1</div>"); webresult("<div id=from>1.1.1.1</div>"); webresult("<div id=connect>server1</div>"); } else { webresult("<div id=status>NO</div>");
4) 客戶端調用:
在需要顯示的地方加入:
<div id=connect> <div id=result></div> </div>
這樣,你只要在點擊或鼠標掃過的地方加入這個事件就可以了