Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求)
    本篇博客介绍Cocos2d-x 3.2Lua演示样例中的XMLHttpRequestTest,这里提供GET和POST两种http请求方式,返回数据类型有下面几种:
cc.XMLHTTPREQUEST_RESPONSE_STRING = 0  -- 返回字符串类型
cc.XMLHTTPREQUEST_RESPONSE_ARRAY_BUFFER = 1 -- 返回字节数组类型
cc.XMLHTTPREQUEST_RESPONSE_BLOB   = 2 -- 返回二进制大对象类型
cc.XMLHTTPREQUEST_RESPONSE_DOCUMENT = 3 -- 返回文档对象类型
cc.XMLHTTPREQUEST_RESPONSE_JSON = 4 -- 返回JSON数据类型
这些常量的定义能够到Cocos2dConstants.lua下找到。
演示样例代码:
  1. --[[
  2. =================
  3. XMLHttpRequestTest.lua
  4. http请求
  5. =================
  6. ]]--
  7. require("json")
  8.  
  9. local function XMLHttpRequestLayer()
  10. local layer = cc.Layer:create()-- 创建层
  11. local winSize = cc.Director:getInstance():getWinSize()-- 得到窗体大小
  12. local margin = 40-- 间距
  13. local space = 35-- 宽度
  14.  
  15. local function init()
  16. local label = cc.Label:createWithTTF("XML Http Request Test", s_arialPath, 28)-- 使用ttf文字格式的标签
  17. label:setAnchorPoint(cc.p(0.5, 0.5))-- 设置锚点
  18. label:setPosition(cc.p(winSize.width / 2, winSize.height - margin))-- 设置显示位置,宽度为屏幕的中间,高度为屏幕高度减去间距
  19. layer:addChild(label, 0) -- 加入标签到层中
  20.  
  21. -- 显示返回码的标签
  22. local labelStatusCode = cc.Label:createWithTTF("HTTP Status Code", s_markerFeltFontPath, 20)
  23. labelStatusCode:setAnchorPoint(cc.p(0.5, 0.5))
  24. labelStatusCode:setPosition(cc.p(winSize.width / 2, winSize.height - margin - 6 * space))
  25. layer:addChild(labelStatusCode)
  26.  
  27. local menuRequest = cc.Menu:create() -- 创建菜单
  28. menuRequest:setPosition(cc.p(0,0))
  29. layer:addChild(menuRequest) -- 加入菜单
  30.  
  31. --Get
  32. local function onMenuGetClicked()
  33. local xhr = cc.XMLHttpRequest:new() -- http请求
  34. xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_STRING -- 响应类型
  35. xhr:open("GET", "http://httpbin.org/get") -- 打开链接
  36.  
  37. -- 状态改变时调用
  38. local function onReadyStateChange()
  39. -- 显示状态文本
  40. local statusString = "Http Status Code:"..xhr.statusText
  41. labelStatusCode:setString(statusString)
  42. print(xhr.response)
  43. end
  44.  
  45. -- 注冊脚本回调方法
  46. xhr:registerScriptHandler(onReadyStateChange)
  47. xhr:send() -- 发送请求
  48.  
  49. labelStatusCode:setString("waiting...")
  50. end
  51.  
  52. -- 測试Get的标签
  53. local labelGet = cc.Label:createWithTTF("Test Get", s_arialPath, 22)
  54. labelGet:setAnchorPoint(cc.p(0.5, 0.5))
  55. local itemGet = cc.MenuItemLabel:create(labelGet) -- 菜单标签
  56. itemGet:registerScriptTapHandler(onMenuGetClicked) -- 菜单点击事件
  57. itemGet:setPosition(cc.p(winSize.width / 2, winSize.height - margin - space))
  58. menuRequest:addChild(itemGet) -- 加入菜单项
  59.  
  60. --Post
  61. local function onMenuPostClicked()
  62. local xhr = cc.XMLHttpRequest:new() -- 新建一个XMLHttpRequest对象
  63. xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_STRING -- 对应类型为字符串
  64. xhr:open("POST", "http://httpbin.org/post")-- post方式
  65. local function onReadyStateChange()
  66. labelStatusCode:setString("Http Status Code:"..xhr.statusText)
  67. print(xhr.response)
  68. end
  69. -- 注冊脚本方法回调
  70. xhr:registerScriptHandler(onReadyStateChange)
  71. xhr:send()-- 发送
  72.  
  73. labelStatusCode:setString("waiting...")
  74. end
  75.  
  76. -- 測试Post的标签
  77. local labelPost = cc.Label:createWithTTF("Test Post", s_arialPath, 22)
  78. labelPost:setAnchorPoint(cc.p(0.5, 0.5)) -- 设置锚点
  79. local itemPost = cc.MenuItemLabel:create(labelPost) -- 设置菜单项标签
  80. itemPost:registerScriptTapHandler(onMenuPostClicked) -- 注冊菜单项点击回调方法
  81. itemPost:setPosition(cc.p(winSize.width / 2, winSize.height - margin - 2 * space))
  82. menuRequest:addChild(itemPost)
  83.  
  84. --Post Binary
  85. local function onMenuPostBinaryClicked()
  86. local xhr = cc.XMLHttpRequest:new()-- 新建一个XMLHttpRequest对象
  87. xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_ARRAY_BUFFER --返回数据为字节流
  88. xhr:open("POST", "http://httpbin.org/post") -- 打开Socket
  89.  
  90. -- 状态改变时调用
  91. local function onReadyStateChange()
  92. local response = xhr.response -- 获得返回数据
  93. local size = table.getn(response) -- 获得返回数据大小
  94. local strInfo = ""
  95.  
  96. for i = 1,size do
  97. if 0 == response[i] then
  98. strInfo = strInfo.."\'\\0\'"
  99. else
  100. strInfo = strInfo..string.char(response[i])
  101. end
  102. end
  103. labelStatusCode:setString("Http Status Code:"..xhr.statusText)
  104. print(strInfo)
  105. end
  106.  
  107. -- 注冊脚本方法回调
  108. xhr:registerScriptHandler(onReadyStateChange)
  109. xhr:send()-- 发送
  110.  
  111. labelStatusCode:setString("waiting...")
  112. end
  113.  
  114. -- 測试使用Post请求方式发送字节流
  115. local labelPostBinary = cc.Label:createWithTTF("Test Post Binary", s_arialPath, 22)
  116. labelPostBinary:setAnchorPoint(cc.p(0.5, 0.5))
  117. local itemPostBinary = cc.MenuItemLabel:create(labelPostBinary)
  118. itemPostBinary:registerScriptTapHandler(onMenuPostBinaryClicked)
  119. itemPostBinary:setPosition(cc.p(winSize.width / 2, winSize.height - margin - 3 * space))
  120. menuRequest:addChild(itemPostBinary)
  121.  
  122. --Post Json
  123. local function onMenuPostJsonClicked()
  124. local xhr = cc.XMLHttpRequest:new() -- 新建一个XMLHttpRequest对象
  125. xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_JSON -- json数据类型
  126. xhr:open("POST", "http://httpbin.org/post")-- POST方式
  127.  
  128. local function onReadyStateChange()
  129. -- 显示状态码,成功显示200
  130. labelStatusCode:setString("Http Status Code:"..xhr.statusText)
  131. local response = xhr.response -- 获得响应数据
  132. local output = json.decode(response,1) -- 解析json数据
  133. table.foreach(output,function(i, v) print (i, v) end)
  134. print("headers are")
  135. table.foreach(output.headers,print)
  136. end
  137.  
  138. -- 注冊脚本方法回调
  139. xhr:registerScriptHandler(onReadyStateChange)
  140. xhr:send()-- 发送请求
  141.  
  142. labelStatusCode:setString("waiting...")
  143. end
  144.  
  145. -- 測试使用POST方式发送json的标签
  146. local labelPostJson = cc.Label:createWithTTF("Test Post Json", s_arialPath, 22)
  147. labelPostJson:setAnchorPoint(cc.p(0.5, 0.5)) -- 锚点
  148. local itemPostJson = cc.MenuItemLabel:create(labelPostJson) -- 菜单项标签
  149. itemPostJson:registerScriptTapHandler(onMenuPostJsonClicked) -- 注冊菜单项点击
  150. itemPostJson:setPosition(cc.p(winSize.width / 2, winSize.height - margin - 4 * space))
  151. menuRequest:addChild(itemPostJson)
  152. end
  153.  
  154. -- 节点回调事件
  155. local function onNodeEvent(eventName)
  156. if "enter" == eventName then
  157. init()
  158. end
  159. end
  160.  
  161. -- 注冊层的监听回调事件
  162. layer:registerScriptHandler(onNodeEvent)
  163.  
  164. return layer
  165. end
  166.  
  167. function XMLHttpRequestTestMain()
  168. local scene = cc.Scene:create() -- 创建场景
  169. scene:addChild(XMLHttpRequestLayer()) -- 加入层
  170. scene:addChild(CreateBackMenuItem()) -- 加入返回菜单项,详细实现查看helper.lua文件
  171. return scene
  172. end
效果图例如以下:
Test Get:
Test Post:
Test Post Binary:
Test Post JSON:

Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求)的更多相关文章

  1. Cocos2d-x 3.1.1 Lua演示样例 ActionManagerTest(动作管理)

    Cocos2d-x 3.1.1 Lua演示样例 ActionManagerTest(动作管理) 本篇博客介绍Cocos2d-x的动作管理样例,这个样例展示了Cocos2d-x的几个动作: MoveTo ...

  2. Cocos2d-x 3.1.1 Lua演示样例 ActionEaseTest(动作)

    Cocos2d-x Lua演示样例 ActionEaseTest(动作)   本篇博客介绍Cocos2d-x中的动作,Cocos2d-x为我们提供了丰富的动作接口,以下笔者就具体介绍一下:   本系列 ...

  3. Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试)

    Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试)  本篇博客介绍Cocos2d-x 3.2Lua演示样例中点击移动的样例,在这个样例你能够得到怎样创建单点触 ...

  4. Cocos2d-x 3.2 Lua演示样例 AssetsManagerTest(资源管理器)

    Cocos2d-x 3.2 Lua演示样例 AssetsManagerTest(资源管理器) 本篇博客介绍Cocos2d-x 为我们提供的一个类--AssetsManager在Lua中的使用样例,效果 ...

  5. Cocos2d-x 3.1.1 Lua演示样例 ActionsProgressTest(进度条)

    Cocos2d-x 3.1.1 Lua演示样例 ActionsProgressTest(进度条) 本篇博客介绍Cocos2d-x中的进度条动画,进度条涉及以下几个重要的类和方法,笔者来给大家具体解说一 ...

  6. Cocos2d-x 3.2 Lua演示样例CurrentLanguageTest(当前语言环境)

    Cocos2d-x 3.2 Lua演示样例CurrentLanguageTest(当前语言环境) 转载请注明:IT_xiao小巫 本篇博客介绍Cocos2d-x 3.2给我们提供的一个样例.获取当前程 ...

  7. Cocos2d-x 3.2 Lua演示样例FontTest(字体測试)

    Cocos2d-x 3.2 Lua演示样例FontTest(字体測试) 本篇博客介绍Cocos2d-x 3.2中Lua測试项目中的FontTest样例,主要使用了字体文件来创建我们想要的字体样式: 第 ...

  8. ArcGIS教程:地理处理服务演示样例(河流网络)(三)

    设置输出符号系统 步骤: 展开 StoweStreamNet.tbx 并双击创建河流网络模型. 接受默认的 45 公顷并单击确定以运行模型. StreamNet 图层将加入至 ArcMap. 右键单击 ...

  9. Cocos2d-x-Lua演示样例项目HelloLua

    Cocos2d-x-Lua演示样例项目HelloLua 本篇博客介绍Cocos2d-x中Lua的实例项目,就是使用Cocos2d-x创建的初始项目执行所呈现的农场,这里笔者取名为HelloLua.本篇 ...

随机推荐

  1. Microsoft2013校园招聘笔试题及解答

    继续求拍砖!!!! 1. You are managing the database of a book publichser, you currently store the book orders ...

  2. IOS-UITextField-邮箱后缀联想赛

    最近做的项目,有一个函数,百度了一下 结果没 要研究了一下. 当用户输入邮箱形式的账号时,输入完"@"符号后.联想出经常使用的邮箱 点击某一行,将改行代表邮箱自己主动输入到账号输入 ...

  3. JavaEE session机制

    JavaEE session机制 Http协议: 在讲session之前,必须说下Http协议,HTTP是一个client和server端请求和应答的标准(TCP).由HTTPclient发起一个请求 ...

  4. 23、Cocos2dx 3.0游戏开发找小三之粒子系统:你那里下雪了吗?

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30485919 春雨惊春清谷天,夏满芒夏暑相连, 秋处 ...

  5. INSTALL_FAILED_MEDIA_UNAVAILABLE错误处理

    问题描写叙述: 在android手机上安装apk的时候,报错例如以下: Installation error: INSTALL_FAILED_MEDIA_UNAVAILABLE Please chec ...

  6. C#的百度地图开发(二)转换JSON数据为相应的类

    原文:C#的百度地图开发(二)转换JSON数据为相应的类 在<C#的百度地图开发(一)发起HTTP请求>一文中我们向百度提供的API的URL发起请求,并得到了返回的结果,结果是一串JSON ...

  7. cocos2d-x ios游戏开发初认识(五) CCsprite精灵类

    这次写一下精灵创建的几种类型: 一.通过文件创建: 在原有的基础上加入例如以下代码: //一.通过文件创建精灵 CCSprite *bg =CCSprite::create("map.png ...

  8. Kdd Cup 2013 总结2

  9. Oracle本地管理对照数据字典管理表空间

    Locally vs. Dictionary Managed Tablespaces 整理自:http://www.orafaq.com/node/3. When Oracleallocates sp ...

  10. JUnit4.8.2来源分析-6.1 排序和过滤

    Runner.sort.Request.sortWith和Sorter.apply yqj2065很快,他们搞死. Sorter.apply().Request.sortWith()和Sortable ...