1. django 獲取post傳遞的json數據
因為客戶端傳遞過來的數據是json數據,可以看成一個json對象。不是傳過來的post表單,所以你用request.POST.get('ID', '')這種肯定取不到值的。
defdatasave(request):
dict={}
info='Datalogsavesuccess'
try:
ifrequest.method=='POST':
req=simplejson.loads(request.raw_post_data)
username=req['username']
password=req['password']
datas=req['datas']
game_id1=datas[0]['game_id']
except:
importsys
info="%s||%s"%(sys.exc_info()[0],sys.exc_info()[1])
dict['message']=info
dict['create_at']=str(ctime())
json=simplejson.mps(dict)
returnHttpResponse(json)
request.raw_post_data表示的是從客戶端發送過來的原始數據,為了純字元串, 通過simplejson的loads方法將其轉換為字典數據類型req.
上面的代碼也演示了如何以JSON格式作為響應值, 而非HTML, 即通過simplejson的mps方法, 將字典數據dict序列化為字元串形式,將通過HttpResponse返回.
2. koa2怎麼用ctx.body給前端ajax返回數據
這種情況很大可能是後台返回的數據不符合前端ajax要求比如這個ajax默認可能是需要返回json的結果你後台沒處理成json只是普通的text返回就會出現這個情況
3. EXT框架下chart的json數據的顯示問題
完全的實時做不到,大概有個5秒左右的間隔還是可以接受的吧?這樣:
在前端網頁上,用javascript,使用ajax每隔5秒向伺服器發起一個請求查詢當前伺服器的系統狀態
伺服器端php處理這個請求然後返回一個json或者xml的數據給前端
前端解析這個json或者xml數據,用js或者flash展示出來。
後端用php實現
前端用一個javascript框架,比如用Ext的Direct和Chart組件,或者用JQuery+Highchart共同來解決。
所以,要學習javascript,html,php吧
4. 前端傳json,後端怎麼接收
如果後端用 node js 的 koa 庫,直接從 request.body 中獲取對應參數即可。
5. springmvc怎麼將響應數據轉換成json數據
@ResponseBody
@RequestMapping(value = {"/queryByIds"},method=RequestMethod.POST)
public List<UsrUser> queryByIds(Model model){
List<UsrUser> list=new ArrayList();
return list;
}
直接返回list,前台dataType用json就可以接收到json數據了,springmvc框架會自動轉換
6. java怎麼接收介面請求的json數據
public void test(Long clusterId,boolean monitorSendAllFlag) {
boolean result=false;
try {
String url ="http://www.xxx.com/xxx/xxx.action";
String json= HttpConfigUtil.getHttpResponse(url);
System.out.println(json);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getHttpResponse(String allConfigUrl) {
BufferedReader in = null;
StringBuffer result = null;
try {
URI uri = new URI(allConfigUrl);
URL url = uri.toURL();
URLConnection connection = url.openConnection();
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Charset", "utf-8");
connection.connect();
result = new StringBuffer();
//讀取URL的響應
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
return result.toString();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return null;
}
7. 如何在Django中接收JSON格式的數據
如何在Django中接收JSON格式的數據
Django做了大量工作簡化我們的Web開發工作, 這其中當然也包括接收來自客戶端的數據這一普遍需求. 大部分時候,從客戶端傳入的數據主要是FORM的POST數據,和來自URL的GET數據, 在Django中對應了HttpRequest對象的POST和GET屬性, 例如讀取FORM表單中的用戶名username輸入框的內容:
def someView(request): username = request.POST.get('username'); ......
在WEB2.0時代, 如果我們從客戶端傳入的是JSON格式的數據, 上面的方法就無法正常讀出數據了. 可能有人要問,為什麼一定要用JSON格式的數據, 不直接編碼成FORM形式的數據呢? 因為JSON格式能夠更好地體現數據的層次結構, 而FORM形式的數據往往只能是單層.
下面通過一個例子演示如何從HTML中發送json,並在Django中接收json數據.
在HTML中,可以通過JSON對象將數據以Json格式發送到伺服器,假設在play.html中有以下內容要發送到伺服器:
用戶名username
密碼password
一個數組,其中每個元素包含: 游戲編號game_id和得分level
那麼, 可以使用如下JavaScript(JQuery)代碼:
<script type="text/javascript"> $(function() { $('#upload').click(function() { var json_obj = { username: $('#username').val(), password: $('#password').val(), datas: [ { game_id: $('#datas1').val(), level: $('#level1').val() }, { game_id: $('#datas2').val(), level: $('#level2').val() } ] }; //JSON對象 var json_str = JSON.stringify(json_obj); //將JSON對象轉變成JSON格式的字元串 $.post("/datasave", json_str, callback, "json"); }) function callback(json){ $('#response').html('code:'+json['status']['code'] + "\tmessage:" + json['status']['message']); } }) </script>
在上面的代碼中, 數據將發送到/datasave, 在Django中,視圖方法若還使用request.POST來讀數據, 得到的全是None, 這時得使用request.raw_post_data, 並藉助simplejson來將其轉換為字典dict數據類型, 然後的使用就簡單了,如下:
def datasave(request): dict = {} info = 'Data log save success' try: if request.method == 'POST'req = simplejson.loads(request.raw_post_data) username = req['username'] password = req['password'] datas = req['datas'] game_id1 = datas[0]['game_id'] except: import sys info = "%s || %s" % (sys.exc_info()[0], sys.exc_info()[1]) dict['message']=info dict['create_at']=str(ctime()) json=simplejson.mps(dict) return HttpResponse(json)
request.raw_post_data表示的是從客戶端發送過來的原始數據,為了純字元串, 通過simplejson的loads方法將其轉換為字典數據類型req.
上面的代碼也演示了如何以JSON格式作為響應值, 而非HTML, 即通過simplejson的mps方法, 將字典數據dict序列化為字元串形式,將通過HttpResponse返回.
8. 如何在Django中接收JSON格式的數據
Django做了大量工作簡化我們的Web開發工作, 這其中當然也包括接收來自客戶端的數據這一普遍需求. 大部分時候,從客戶端傳入的數據主要是FORM的POST數據,和來自URL的GET數據, 在Django中對應了HttpRequest對象的POST和GET屬性, 例如讀取FORM表單中的用戶名username輸入框的內容: def someView(request): username = request.POST.get('username'); ...... 在WEB2.0時代, 如果我們從客戶端傳入的是JSON格式的數據, 上面的方法就無法正常讀出數據了. 可能有人要問,為什麼一定要用JSON格式的數據, 不直接編碼成FORM形式的數據呢? 因為JSON格式能夠更好地體現數據的層次結構, 而FORM形式的數據往往只能是單層. 下面通過一個例子演示如何從HTML中發送json,並在Django中接收json數據. 在HTML中,可以通過JSON對象將數據以Json格式發送到伺服器,假設在play.html中有以下內容要發送到伺服器: 用戶名username 密碼password 一個數組,其中每個元素包含: 游戲編號game_id和得分level 那麼, 可以使用如下JavaScript(JQuery)代碼: <script type="text/javascript"> $(function() { $('#upload').click(function() { var json_obj = { username: $('#username').val(), password: $('#password').val(), datas: [ { game_id: $('#datas1').val(), level: $('#level1').val() }, { game_id: $('#datas2').val(), level: $('#level2').val() } ] }; //JSON對象 var json_str = JSON.stringify(json_obj); //將JSON對象轉變成JSON格式的字元串 $.post("/datasave", json_str, callback, "json"); }) function callback(json){ $('#response').html('code:'+json['status']['code'] + "\tmessage:" + json['status']['message']); } }) </script> 在上面的代碼中, 數據將發送到/datasave, 在Django中,視圖方法若還使用request.POST來讀數據, 得到的全是None, 這時得使用request.raw_post_data, 並藉助simplejson來將其轉換為字典dict數據類型, 然後的使用就簡單了,如下: def datasave(request): dict = {} info = 'Data log save success' try: if request.method == 'POST': req = simplejson.loads(request.raw_post_data) username = req['username'] password = req['password'] datas = req['datas'] game_id1 = datas[0]['game_id'] except: import sys info = "%s || %s" % (sys.exc_info()[0], sys.exc_info()[1]) dict['message']=info dict['create_at']=str(ctime()) json=simplejson.mps(dict) return HttpResponse(json) request.raw_post_data表示的是從客戶端發送過來的原始數據,為了純字元串, 通過simplejson的loads方法將其轉換為字典數據類型req. 上面的代碼也演示了如何以JSON格式作為響應值, 而非HTML, 即通過simplejson的mps方法, 將字典數據dict序列化為字元串形式,將通過HttpResponse返回.
9. 怎麼通過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伺服器響應的數據全部接收完畢")
}
}
10. 【http】什麼是cors跨域
前端開發中,常常需要進行跨域請求。既然提到跨域,首先我們的知道什麼是「同源策略」。
同源策略限制從一個源載入的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用於隔離潛在惡意文件的關鍵的安全機制。
如果協議,埠(如果指定了一個)和域名對於兩個頁面是相同的,則兩個頁面具有相同的源。
同一個源內,資源的訪問是很自由的。就跟在自己家中,想開冰箱開冰箱,想幹啥幹啥。如果你想訪問不同源的資源,可就沒那麼自由了,這就是跨域。
關於跨域,常用的JSONP應該都知道。JSONP的原理是什麼呢?我們來看看大神賀師俊的解釋:
很簡單,就是利用<script>標簽沒有跨域限制的「漏洞」(歷史遺跡啊)來達到與第三方通訊的目的。當需要通訊時,本站腳本創建一個<script>元素,地址指向第三方的API網址,並提供一個回調函數來接收數據(函數名可約定,或通過地址參數傳遞)。 第三方產生的響應為json數據的包裝(故稱之為jsonp,即json padding),這樣瀏覽器會調用callback函數,並傳遞解析後json對象作為參數。本站腳本可在callback函數里處理所傳入的數據。
可以知道JSONP就是個bug般的存在啊,如果你是一個有潔癖的程序員回想說:這不合理,這部干凈。因此我們引出cors。
那麼,什麼是cors呢?
我們來看看互動網路的解釋:
CORS(跨來源資源共享)是一份瀏覽器技術的規范,提供了Web服務從不同網域傳來沙盒腳本的方法,以避開瀏覽器的同源策略,是JSONP模式的現代版。
維基網路的解釋(手動谷歌):
Cross-origin resource sharing (CORS) is a mechanism that allows restricted resources (e.g. fonts) on a web page to be requested from another domain outside the domain from which the first resource was served.
這樣看來,其實嘛,cors就是一個規范,機制,基於這個規范,不同源之間才可以請求資源。相當於一個江湖規矩,大家都按規矩來嘛不是?不講規矩?信不信小拳拳捶你。
所以呢,要想使用cors跨域訪問,你就得講規矩。下面我們來看看有哪些規矩。
跨域資源共享標准( cross-origin sharing standard )允許在下列場景中使用跨域 HTTP 請求:
cors中有個術語叫 「簡單請求」 ,若請求滿足所有下述條件,則該請求可視為「簡單請求」:
使用下列方法之一:
之所以區分簡單請求,是因為cors需要處理一些「非簡單請求」,這種特殊處理叫做「預檢請求」。大人物來了,總要提前准備准備吧,封路啥的blabla。
預檢請求的作用是 提前獲知伺服器是否允許該實際請求 。「預檢請求」的使用,可以 避免跨域請求對伺服器的用戶數據產生未預期的影響 。
一張圖可以清晰看到提前發送預檢請求的cors請求
Request Headers:
Response Header:
cors在koa中的使用:
相關鏈接: