NodeJs與ActionScript的GET和POST通訊

來源:互聯網
上載者:User

標籤: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通訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.