標籤:style blog http color io os ar for 資料
今天項目遇到一個小問題,做了個小功能,向服務端發送GET請求,但是服務端解析資料是時候報語法錯誤,如下:
make Request data error:SyntaxError: Error #1132: 無效的 JSON 解析輸入。
Error #2044: 未處理的 error:。 text=make Request data error:SyntaxError: Error #1132: 無效的 JSON 解析輸入。
很明顯,引發報錯的原因是服務端把這個資料當作JSON格式去解析了,但是我發送的格式是BINARY,所以導致報錯了。
服務端的哥們叫我發了好幾遍請求地址給他,發給他的時候他覺得GET請求的參數應該是這樣的url?key=value&.....
為了證明給他看,GET請求不一定是這樣子的,我自己寫了一個NodeJS和ActionScript通訊的小Demo給他看。
NodeJS方代碼如下:
1 var http = require(‘http‘); 2 var fs = require(‘fs‘); 3 var path = require(‘path‘); 4 var mime = require(‘mime‘); 5 var querystring = require(‘querystring‘); 6 var url = require(‘url‘) 7 var cache ={}; 8 9 var postserver = http.createServer(function(request, response){10 request.addListener("data", function(chunk){11 console.log(‘Get data from : ‘+request.url + " ======= length : " + chunk.length);12 console.log(‘Name From Request : ‘ + chunk);13 });14 });15 16 var gettserver = http.createServer(function(request, response){17 var params = url.parse(request.url, true);18 console.log(params);19 response.end();20 });21 22 postserver.listen("8889", function(){23 console.log("===========Server now listenling:8889====================");24 });25 gettserver.listen("8887", function(){26 console.log("===========Server now listenling:8887====================");27 });
用戶端ActionScript代碼:
1 <?xml version="1.0" encoding="utf-8"?> 2 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 3 xmlns:s="library://ns.adobe.com/flex/spark" 4 xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="onInit()"> 5 <fx:Declarations> 6 <!-- Place non-visual elements (e.g., services, value objects) here --> 7 </fx:Declarations> 8 <fx:Script> 9 <![CDATA[10 private var request:URLRequest;11 private var loader:URLLoader;12 private var urlData:URLVariables;13 private function onPostClicked():void14 {15 // TODO Auto Generated method stub16 request.method = URLRequestMethod.POST;17 request.url = "http://localhost:8889";18 urlData.name = "POST";19 doRequest();20 }21 22 private function onGetClicked():void23 {24 // TODO Auto Generated method stub25 request.method = URLRequestMethod.GET;26 request.url = "http://localhost:8887";27 urlData.name = "GET";28 doRequest();29 }30 31 private function doRequest():void32 {33 loader.load(request);34 }35 36 private function onInit():void37 {38 // TODO Auto Generated method stub39 request = new URLRequest();40 loader = new URLLoader();41 urlData = new URLVariables();42 request.data = urlData;43 loader.dataFormat = URLLoaderDataFormat.BINARY;44 loader.addEventListener(Event.COMPLETE, onComplete);45 loader.addEventListener(IOErrorEvent.IO_ERROR, onError);46 Security.allowDomain("*");47 }48 49 protected function onComplete(event:Event):void50 {51 // TODO Auto-generated method stub52 trace("Success......");53 }54 55 protected function onError(event:IOErrorEvent):void56 {57 // TODO Auto-generated method stub58 trace("Fail......");59 }60 ]]>61 </fx:Script>62 <s:Button label="SEND GET" click="onGetClicked()" width="100" height="30" x="10" y="10"/>63 <s:Button label="SEND POST" click="onPostClicked()" width="100" height="30" x="10" y="50"/>64 </s:Application>
用戶端:
點擊SEND GET按鈕會向NodeJs服務端以get方式請求,
點擊SEND POST按鈕則會向NodeJs服務端以post方式發送請求。
服務端結果如下:
這個是收到一次GET請求和一次POST請求的結果。
在最初的時候,我將POST請求的處理和GET請求的處理都寫到了同一個處理函數裡面去,但是GET請求會成功,console不會列印資訊,不知道是啥子原因,於是將GET請求的連接埠與POST請求的連接埠分開來,GET連接埠會列印相關內容了。
暫時不知道是什麼原因,後續研究之後會update。
UPDATE:特喵的,發現居然是用戶端解析問題,服務端的結果返回沒有用JSON格式化。
NodeJs與ActionScript的GET和POST通訊