ajax.htm 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759
  1. <#def title = "AJAX"/>
  2. <#def keyword = "ZhiqimUI"/>
  3. <#def desc = " AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术"/>
  4. <#def prevUrl = "../nav/tabnav.htm"/>
  5. <#def nextUrl = "imageClipper.htm"/>
  6. ${zhiqim_com_head()}
  7. ${zhiqim_com_head_main()}
  8. <script>
  9. <!--
  10. function doChange(tabnav)
  11. {
  12. doUpdateCode(Z(tabnav));
  13. }
  14. function doUpdateCode($this)
  15. {//更新代码
  16. var html = $this.find("section > div").htmlt();
  17. $this.find("section > div").next("div > span").html(html);
  18. }
  19. //-->
  20. </script>
  21. ${zhiqim_com_head_end()}
  22. ${zhiqim_com_mobileUI_scrollJs()}
  23. ${zhiqim_com_body()}
  24. ${zhiqim_com_topnav("ui")}
  25. <!--容器开始 -->
  26. <div id="container" class="container">
  27. ${zhiqim_com_container_ui("ZmUI", "tool", "ajax")}
  28. <!--主体-->
  29. <div id="mainbody" class="mainbody">
  30. ${zhiqim_com_breadcrumb("UI", "ZmUI", "工具", "Ajax")}
  31. <!-- content开始 -->
  32. <div id="mobileUI_content" class="content">
  33. <!-- 左侧详情 -->
  34. <div class="mobileUI-left">
  35. <#-- 标题 -->
  36. <div class="z-relative-left z-w100p z-pd16 z-bg-blue z-px18 z-lh200p z-bold" style="border-left:5px solid #4bacc6">
  37. <p class="z-text-blue">AJAX:</p>
  38. <p class="z-color-333" style="text-indent:38px;">
  39. AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
  40. 凡狐AJAX采用面向RMI的概念设计,通过指定类和方法,传入参数对应方法的参数,通过RMI访问JAVA类的方法获取执行结果。
  41. </p>
  42. </div>
  43. <#-- 一、调用成功,回调函数(无参数的方法) -->
  44. <div class="tutorial title">一、调用成功,回调函数(无参数的方法)</div>
  45. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  46. <nav>
  47. <ul class="zi-float-left">
  48. <li class="z-active">示例</li>
  49. <li>代码</li>
  50. <li>说明</li>
  51. </ul>
  52. </nav>
  53. <section style="min-height:150px;">
  54. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  55. <!-- 编写AJAX的函数 -->
  56. <script>
  57. function doTestSuccess()
  58. {
  59. var ajax = new Z.Ajax();
  60. ajax.setContextPath("${context.getContextPath()}");
  61. ajax.setClassName("com.zhiqim.zhiqim.tutorial.presenter.AjaxPresenter");
  62. ajax.setMethodName("doTestSuccess");
  63. ajax.setFailureAlert();
  64. ajax.setSuccess(function(){Z.alert(this.responseText);});
  65. ajax.setLoading(document, true);
  66. ajax.execute();
  67. }
  68. </script>
  69. <!-- 编写AJAX的点击调用 -->
  70. <a href="javascript:void(0);" onclick="doTestSuccess();">点我执行[doTestSuccess]函数</a>
  71. </div>
  72. <div class="z-relative-left z-w100p z-pd10">
  73. <span class="z-text-prewrap z-pre"></span>
  74. </div>
  75. <div class="z-pd10 z-px16 z-lh200p">
  76. 1、定义一个AJAX调用函数,设置类名或类别名、类方法和回调函数,然后执行<br>
  77. 2、在页面上设置点击执行函数,通过设置callback回调得到responseStatus和responseText<br>
  78. </div>
  79. </section>
  80. </div>
  81. <#-- 二、调用成功,回调函数(带参数、使用类别名@AnAlias) -->
  82. <div class="tutorial title">二、调用成功,回调函数(带参数、使用类别名@AnAlias)</div>
  83. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  84. <nav>
  85. <ul class="zi-float-left">
  86. <li class="z-active">示例</li>
  87. <li>代码</li>
  88. <li>说明</li>
  89. </ul>
  90. </nav>
  91. <section style="min-height:150px;">
  92. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  93. <!-- 编写AJAX的函数 -->
  94. <script>
  95. function doTestParam()
  96. {
  97. var ajax = new Z.Ajax();
  98. ajax.setContextPath("${context.getContextPath()}");
  99. ajax.setClassName("AjaxPresenter");
  100. ajax.setMethodName("doTestParam");
  101. ajax.addParam("111111");
  102. ajax.addParam("222222");
  103. ajax.setCallback(function()
  104. {
  105. Z.alert("状态:"+this.responseStatus+"<br>信息:"+this.responseText);
  106. });
  107. ajax.execute();
  108. }
  109. </script>
  110. <!-- 编写AJAX的点击调用 -->
  111. <a href="javascript:doTestParam();">点我执行[doTestParam]函数</a>
  112. </div>
  113. <div class="z-relative-left z-w100p z-pd10">
  114. <span class="z-text-prewrap z-pre"></span>
  115. </div>
  116. <div class="z-pd10 z-px16 z-lh200p">
  117. 1、定义一个AJAX调用函数,设置类类别名、类方法和回调函数<br>
  118. 2、通过ajax.addParam();设置参数,参数个数和类型要和后端对应,支持字符串和基本类型
  119. 3、在页面上设置点击执行函数,通过设置callback回调得到responseStatus和responseText<br>
  120. </div>
  121. </section>
  122. </div>
  123. <#-- 三、调用成功,显示到元素中(无参数、使用类别名@AnAlias) -->
  124. <div class="tutorial title">三、调用成功,显示到元素中(无参数、使用类别名@AnAlias)</div>
  125. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  126. <nav>
  127. <ul class="zi-float-left">
  128. <li class="z-active">示例</li>
  129. <li>代码</li>
  130. <li>说明</li>
  131. </ul>
  132. </nav>
  133. <section style="min-height:150px;">
  134. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  135. <!-- 编写AJAX的函数 -->
  136. <script>
  137. function doTestSuccess2()
  138. {
  139. var ajax = new Z.Ajax();
  140. ajax.setContextPath("${context.getContextPath()}");
  141. ajax.setClassName("AjaxPresenter");
  142. ajax.setMethodName("doTestSuccess");
  143. ajax.setCallback("successId");
  144. ajax.execute();
  145. }
  146. </script>
  147. <!-- 编写AJAX的点击调用 -->
  148. <a href="javascript:doTestSuccess2();">点我执行[doTestSuccess]函数</a><br><br>
  149. <!-- 编写AJAX的响应结果 -->
  150. 返回内容:<span id="successId"></span>
  151. </div>
  152. <div class="z-relative-left z-w100p z-pd10">
  153. <span class="z-text-prewrap z-pre"></span>
  154. </div>
  155. <div class="z-pd10 z-px16 z-lh200p">
  156. 1、定义一个AJAX调用函数,设置类名或类别名、类方法和回调函数,然后执行<br>
  157. 2、在页面上设置点击执行函数,把结果放置到Z("#"+id)中<br>
  158. </div>
  159. </section>
  160. </div>
  161. <#-- 四、调用成功,加载器,后端等待5秒(无参数、使用类别名@AnAlias) -->
  162. <div class="tutorial title">四、调用成功,加载器,后端等待5秒(无参数、使用类别名@AnAlias)</div>
  163. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  164. <nav>
  165. <ul class="zi-float-left">
  166. <li class="z-active">示例</li>
  167. <li>代码</li>
  168. <li>说明</li>
  169. </ul>
  170. </nav>
  171. <section style="min-height:150px;">
  172. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  173. <!-- 编写AJAX的函数 -->
  174. <script>
  175. function doTestLoading()
  176. {
  177. var ajax = new Z.Ajax();
  178. ajax.setContextPath("${context.getContextPath()}");
  179. ajax.setClassName("AjaxPresenter");
  180. ajax.setMethodName("doTestLoading");
  181. ajax.setCallback(function()
  182. {
  183. Z.alert("状态:"+this.responseStatus+"<br>信息:"+this.responseText);
  184. });
  185. ajax.setLoading(document, true);
  186. ajax.execute();
  187. }
  188. </script>
  189. <!-- 编写AJAX的点击调用 -->
  190. <a href="javascript:doTestLoading();">点我执行[doTestLoading]函数</a><br><br>
  191. </div>
  192. <div class="z-relative-left z-w100p z-pd10">
  193. <span class="z-text-prewrap z-pre"></span>
  194. </div>
  195. <div class="z-pd10 z-px16 z-lh200p">
  196. 1、定义一个AJAX调用函数,设置类类别名、类方法和回调函数<br>
  197. 2、通过ajax.setLoading(document, true);设置全屏加载器且遮罩,然后执行<br>
  198. 3、在页面上设置点击执行函数,通过设置callback回调得到responseStatus和responseText<br>
  199. </div>
  200. </section>
  201. </div>
  202. <#-- 五、调用成功,指定加载器元素,后端等待5秒(无参数、使用类别名@AnAlias) -->
  203. <div class="tutorial title">五、调用成功,指定加载器元素,后端等待5秒(无参数、使用类别名@AnAlias)</div>
  204. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  205. <nav>
  206. <ul class="zi-float-left">
  207. <li class="z-active">示例</li>
  208. <li>代码</li>
  209. <li>说明</li>
  210. </ul>
  211. </nav>
  212. <section style="min-height:150px;">
  213. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  214. <!-- 编写AJAX的函数 -->
  215. <script>
  216. function doTestLoading2()
  217. {
  218. var ajax = new Z.Ajax();
  219. ajax.setContextPath("${context.getContextPath()}");
  220. ajax.setClassName("AjaxPresenter");
  221. ajax.setMethodName("doTestLoading");
  222. ajax.setCallback("testLoading2");
  223. ajax.setLoading("testLoading2");
  224. ajax.execute();
  225. }
  226. </script>
  227. <!-- 编写AJAX的点击调用 -->
  228. <a href="javascript:doTestLoading2();">点我执行[doTestLoading2]函数</a><br><br>
  229. <!-- 指定加载器的位置 -->
  230. <div id="testLoading2" class="z-w100p z-h100 z-text-center z-bd z-red" style="line-height:100px;"></div>
  231. </div>
  232. <div class="z-relative-left z-w100p z-pd10">
  233. <span class="z-text-prewrap z-pre"></span>
  234. </div>
  235. <div class="z-pd10 z-px16 z-lh200p">
  236. 1、定义一个AJAX调用函数,设置类类别名、类方法和回调函数<br>
  237. 2、通过ajax.setLoading("testLoading2");设置在testLoading2上显示加载器无遮罩,然后执行<br>
  238. 3、如果需要遮罩层,设置为ajax.setLoading("testLoading2", true);
  239. 4、在页面上设置点击执行函数,通过设置callback回调得到responseStatus和responseText<br>
  240. </div>
  241. </section>
  242. </div>
  243. <#-- 六、调用成功,自定义加载器,后端等待5秒(无参数、使用类别名@AnAlias) -->
  244. <div class="tutorial title">六、调用成功,自定义加载器,后端等待5秒(无参数、使用类别名@AnAlias)</div>
  245. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  246. <nav>
  247. <ul class="zi-float-left">
  248. <li class="z-active">示例</li>
  249. <li>代码</li>
  250. <li>说明</li>
  251. </ul>
  252. </nav>
  253. <section style="min-height:150px;">
  254. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  255. <!-- 编写AJAX的函数 -->
  256. <script>
  257. function doTestLoading3()
  258. {
  259. var ajax = new Z.Ajax();
  260. ajax.setContextPath("${context.getContextPath()}");
  261. ajax.setClassName("AjaxPresenter");
  262. ajax.setMethodName("doTestLoading");
  263. ajax.setCallback("testLoading3");
  264. ajax.setLoading(Z.loading({target: "testLoading3", shadow: true, position: 1}));
  265. ajax.execute();
  266. }
  267. </script>
  268. <!-- 编写AJAX的点击调用 -->
  269. <a href="javascript:doTestLoading3();">点我执行[doTestLoading3]函数</a><br><br>
  270. <!-- 指定加载器的位置 -->
  271. <div id="testLoading3" class="z-w100p z-h100 z-text-center z-bd z-red" style="line-height:100px;"></div>
  272. </div>
  273. <div class="z-relative-left z-w100p z-pd10">
  274. <span class="z-text-prewrap z-pre"></span>
  275. </div>
  276. <div class="z-pd10 z-px16 z-lh200p">
  277. 1、定义一个AJAX调用函数,设置类类别名、类方法和回调函数<br>
  278. 2、通过Z.loading()函数自定义加载器,然后通过ajax.setLoading();设置到Z.Ajax中<br>
  279. 3、在页面上设置点击执行函数,通过设置callback回调得到responseStatus和responseText<br>
  280. </div>
  281. </section>
  282. </div>
  283. <#-- 七、调用失败(无参数、使用类别名@AnAlias) -->
  284. <div class="tutorial title">七、调用失败(无参数、使用类别名@AnAlias)</div>
  285. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  286. <nav>
  287. <ul class="zi-float-left">
  288. <li class="z-active">示例</li>
  289. <li>代码</li>
  290. <li>说明</li>
  291. </ul>
  292. </nav>
  293. <section style="min-height:150px;">
  294. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  295. <!-- 编写AJAX的函数 -->
  296. <script>
  297. function doTestError()
  298. {
  299. var ajax = new Z.Ajax();
  300. ajax.setContextPath("${context.getContextPath()}");
  301. ajax.setClassName("AjaxPresenter");
  302. ajax.setMethodName("doTestError");
  303. ajax.setCallback(function()
  304. {
  305. Z.alert("状态:"+this.responseStatus+"<br>信息:"+this.responseText);
  306. });
  307. ajax.execute();
  308. }
  309. </script>
  310. <!-- 编写AJAX的点击调用 -->
  311. <a href="javascript:doTestError();">点我执行[doTestError]函数</a>
  312. </div>
  313. <div class="z-relative-left z-w100p z-pd10">
  314. <span class="z-text-prewrap z-pre"></span>
  315. </div>
  316. <div class="z-pd10 z-px16 z-lh200p">
  317. 1、定义一个AJAX调用函数,设置类类别名、类方法和回调函数<br>
  318. 2、在页面上设置点击执行函数,通过设置callback回调得到responseStatus和responseText<br>
  319. </div>
  320. </section>
  321. </div>
  322. <#-- 八、调用异常(无参数、使用类别名@AnAlias) -->
  323. <div class="tutorial title">八、调用异常(无参数、使用类别名@AnAlias)</div>
  324. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  325. <nav>
  326. <ul class="zi-float-left">
  327. <li class="z-active">示例</li>
  328. <li>代码</li>
  329. <li>说明</li>
  330. </ul>
  331. </nav>
  332. <section style="min-height:150px;">
  333. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  334. <!-- 编写AJAX的函数 -->
  335. <script>
  336. function doTestException()
  337. {
  338. var ajax = new Z.Ajax();
  339. ajax.setContextPath("${context.getContextPath()}");
  340. ajax.setClassName("AjaxPresenter");
  341. ajax.setMethodName("doTestException");
  342. ajax.setCallback(function()
  343. {
  344. Z.alert("状态:"+this.responseStatus+"<br>信息:"+this.responseText);
  345. });
  346. ajax.execute();
  347. }
  348. </script>
  349. <!-- 编写AJAX的点击调用 -->
  350. <a href="javascript:doTestException();">点我执行[doTestException]函数</a>
  351. </div>
  352. <div class="z-relative-left z-w100p z-pd10">
  353. <span class="z-text-prewrap z-pre"></span>
  354. </div>
  355. <div class="z-pd10 z-px16 z-lh200p">
  356. 1、定义一个AJAX调用函数,设置类类别名、类方法和回调函数<br>
  357. 2、在页面上设置点击执行函数,通过设置callback回调得到responseStatus和responseText<br>
  358. </div>
  359. </section>
  360. </div>
  361. <#-- 九、拦截器,未通过显示未通过信息(无参数、使用类别名@AnAlias) -->
  362. <div class="tutorial title">九、拦截器,未通过显示未通过信息(无参数、使用类别名@AnAlias)</div>
  363. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  364. <nav>
  365. <ul class="zi-float-left">
  366. <li class="z-active">示例</li>
  367. <li>代码</li>
  368. <li>说明</li>
  369. </ul>
  370. </nav>
  371. <section style="min-height:150px;">
  372. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  373. <!-- 编写AJAX的函数 -->
  374. <script>
  375. function doTestInterceptor()
  376. {
  377. var ajax = new Z.Ajax();
  378. ajax.setContextPath("${context.getContextPath()}");
  379. ajax.setClassName("AjaxPresenter");
  380. ajax.setMethodName("doTestInterceptor");
  381. ajax.setCallback(function()
  382. {
  383. Z.alert("状态:"+this.responseStatus+"<br>信息:"+this.responseText);
  384. });
  385. ajax.execute();
  386. }
  387. </script>
  388. <!-- 编写AJAX的点击调用 -->
  389. <a href="javascript:doTestInterceptor();">点我执行[doTestInterceptor]函数</a>
  390. </div>
  391. <div class="z-relative-left z-w100p z-pd10">
  392. <span class="z-text-prewrap z-pre"></span>
  393. </div>
  394. <div class="z-pd10 z-px16 z-lh200p">
  395. 1、定义一个AJAX调用函数,设置类类别名、类方法和回调函数<br>
  396. 2、在页面上设置点击执行函数,通过设置callback回调得到responseStatus和responseText<br>
  397. 3、拦截器由Java后端设置,如:
  398. <span class="z-text-prewrap z-pre">
  399. @AnInterceptor("chkAjax1")
  400. public static void doTestInterceptor(HttpRequest request)
  401. {
  402. request.setResponseResult("返回成功信息");
  403. }
  404. </span>
  405. <span class="z-text-prewrap z-pre">
  406. @AnAlias("chkAjax1")
  407. public class AjaxChk1Interceptor implements Interceptor
  408. {
  409. @Override
  410. public void intercept(HttpRequest request) throws Exception
  411. {
  412. request.setResponseError("拦截器不通过");
  413. }
  414. }
  415. </span>
  416. </div>
  417. </section>
  418. </div>
  419. <#-- 十、拦截器,未通过显示未通过信息(同步调用、无参数、使用类别名@AnAlias) -->
  420. <div class="tutorial title">十、拦截器(同步调用、无参数、使用类别名@AnAlias)</div>
  421. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  422. <nav>
  423. <ul class="zi-float-left">
  424. <li class="z-active">示例</li>
  425. <li>代码</li>
  426. <li>说明</li>
  427. </ul>
  428. </nav>
  429. <section style="min-height:150px;">
  430. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  431. <!-- 编写AJAX的函数 -->
  432. <script>
  433. function doTestSyncInterceptor()
  434. {
  435. var ajax = new Z.Ajax();
  436. ajax.setContextPath("${context.getContextPath()}");
  437. ajax.setSync();
  438. ajax.setClassName("AjaxPresenter");
  439. ajax.setMethodName("doTestInterceptor");
  440. ajax.execute();
  441. Z.alert("状态:"+ajax.responseStatus+"<br>信息:"+ajax.responseText);
  442. }
  443. </script>
  444. <!-- 编写AJAX的点击调用 -->
  445. <a href="javascript:doTestSyncInterceptor();">点我执行[doTestSyncInterceptor]函数</a>
  446. </div>
  447. <div class="z-relative-left z-w100p z-pd10">
  448. <span class="z-text-prewrap z-pre"></span>
  449. </div>
  450. <div class="z-pd10 z-px16 z-lh200p">
  451. 1、定义一个AJAX调用函数,设置类类别名、类方法<br>
  452. 2、通过ajax.setSync();设置表示设置成同步等待,同步调用时无需提供回调函数,直接在执行后读出结果即可<br>
  453. 3、在页面上设置点击执行函数,通过设置callback回调得到responseStatus和responseText<br>
  454. 4、拦截器由Java后端设置,如:
  455. <span class="z-text-prewrap z-pre">
  456. @AnInterceptor("chkAjax1")
  457. public static void doTestInterceptor(HttpRequest request)
  458. {
  459. request.setResponseResult("返回成功信息");
  460. }
  461. </span>
  462. <span class="z-text-prewrap z-pre">
  463. @AnAlias("chkAjax1")
  464. public class AjaxChk1Interceptor implements Interceptor
  465. {
  466. @Override
  467. public void intercept(HttpRequest request) throws Exception
  468. {
  469. request.setResponseError("拦截器不通过");
  470. }
  471. }
  472. </span>
  473. </div>
  474. </section>
  475. </div>
  476. <#-- 十一、拦截器,未通过跳转到新页面(无参数、使用类别名@AnAlias) -->
  477. <div class="tutorial title">十一、拦截器,未通过跳转到新页面(无参数、使用类别名@AnAlias)</div>
  478. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  479. <nav>
  480. <ul class="zi-float-left">
  481. <li class="z-active">示例</li>
  482. <li>代码</li>
  483. <li>说明</li>
  484. </ul>
  485. </nav>
  486. <section style="min-height:150px;">
  487. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  488. <!-- 编写AJAX的函数 -->
  489. <script>
  490. function doTestInterceptor2()
  491. {
  492. var ajax = new Z.Ajax();
  493. ajax.setContextPath("${context.getContextPath()}");
  494. ajax.setClassName("AjaxPresenter");
  495. ajax.setMethodName("doTestInterceptor2");
  496. ajax.setCallback(function()
  497. {
  498. alert("状态:"+this.responseStatus+",信息:"+this.responseText);
  499. });
  500. ajax.execute();
  501. }
  502. </script>
  503. <!-- 编写AJAX的点击调用 -->
  504. <a href="javascript:doTestInterceptor2();">点我执行[doTestInterceptor2]函数</a>
  505. </div>
  506. <div class="z-relative-left z-w100p z-pd10">
  507. <span class="z-text-prewrap z-pre"></span>
  508. </div>
  509. <div class="z-pd10 z-px16 z-lh200p">
  510. 1、定义一个AJAX调用函数,设置类类别名、类方法和回调函数<br>
  511. 2、在页面上设置点击执行函数,通过设置callback回调得到responseStatus和responseText<br>
  512. 3、拦截器由Java后端设置,如:
  513. <span class="z-text-prewrap z-pre">
  514. @AnInterceptor("chkAjax2")
  515. public static void doTestInterceptor2(HttpRequest request)
  516. {
  517. request.setResponseResult("返回成功信息");
  518. }
  519. </span>
  520. <span class="z-text-prewrap z-pre">
  521. @AnAlias("chkAjax2")
  522. public class AjaxChk2Interceptor implements Interceptor
  523. {
  524. @Override
  525. public void intercept(HttpRequest request) throws Exception
  526. {
  527. request.setRedirectTop(request.getRootPath("/index.htm"), "拦截器要求,正地跳转到首页");
  528. }
  529. }
  530. </span>
  531. </div>
  532. </section>
  533. </div>
  534. <#-- 十二、拦截器,未通过跳转到新页面(同步调用、无参数、使用类别名@AnAlias) -->
  535. <div class="tutorial title">十二、拦截器,未通过跳转到新页面(同步调用、无参数、使用类别名@AnAlias)</div>
  536. <div class="z-tabnav z-bordered" data-role="z-tabnav" onchange="doChange(this);">
  537. <nav>
  538. <ul class="zi-float-left">
  539. <li class="z-active">示例</li>
  540. <li>代码</li>
  541. <li>说明</li>
  542. </ul>
  543. </nav>
  544. <section style="min-height:150px;">
  545. <div class="z-active z-pd10 z-px16" style="padding-top:40px">
  546. <!-- 编写AJAX的函数 -->
  547. <script>
  548. function doTestSyncInterceptor2()
  549. {
  550. var ajax = new Z.Ajax();
  551. ajax.setContextPath("${context.getContextPath()}");
  552. ajax.setSync();
  553. ajax.setClassName("AjaxPresenter");
  554. ajax.setMethodName("doTestInterceptor2");
  555. ajax.execute();
  556. alert("状态:"+ajax.responseStatus+",信息:"+ajax.responseText);
  557. }
  558. </script>
  559. <!-- 编写AJAX的点击调用 -->
  560. <a href="javascript:doTestSyncInterceptor2();">点我执行[doTestSyncInterceptor2]函数</a>
  561. </div>
  562. <div class="z-relative-left z-w100p z-pd10">
  563. <span class="z-text-prewrap z-pre"></span>
  564. </div>
  565. <div class="z-pd10 z-px16 z-lh200p">
  566. 1、定义一个AJAX调用函数,设置类类别名、类方法<br>
  567. 2、通过ajax.setSync();设置表示设置成同步等待,同步调用时无需提供回调函数,直接在执行后读出结果即可<br>
  568. 3、在页面上设置点击执行函数,通过设置callback回调得到responseStatus和responseText<br>
  569. 4、拦截器由Java后端设置,如:
  570. <span class="z-text-prewrap z-pre">
  571. @AnInterceptor("chkAjax2")
  572. public static void doTestInterceptor2(HttpRequest request)
  573. {
  574. request.setResponseResult("返回成功信息");
  575. }
  576. </span>
  577. <span class="z-text-prewrap z-pre">
  578. @AnAlias("chkAjax2")
  579. public class AjaxChk2Interceptor implements Interceptor
  580. {
  581. @Override
  582. public void intercept(HttpRequest request) throws Exception
  583. {
  584. request.setRedirectTop(request.getRootPath("/index.htm"), "拦截器要求,正地跳转到首页");
  585. }
  586. }
  587. </span>
  588. </div>
  589. </section>
  590. </div>
  591. <#-- AJAX调用参数说明 -->
  592. <div class="tutorial title">AJAX调用参数说明(请求参数十个,响应结果两个)</div>
  593. <table class="z-table z-bordered z-pd10 z-lh200p z-bd-rd8">
  594. <tr bgcolor="#f5f5f5">
  595. <td width="20%">参数</td>
  596. <td width="30%">值</td>
  597. <td width="*">说明</td>
  598. </tr>
  599. <tr>
  600. <td colspan="3" class="z-text-cyan">请求参数</td>
  601. </tr>
  602. <tr>
  603. <td class="z-samp">contextPath</td>
  604. <td>默认为空</td>
  605. <td>当前上下文环境路径,如/admin,默认为空表示根上下文路径</td>
  606. </tr>
  607. <tr>
  608. <td class="z-samp">className</td>
  609. <td>必须</td>
  610. <td>调用的类名或类别名,如AjaxPresenter/com.zhiqim.zhiqim.tutorial.presenter.AjaxPresenter</td>
  611. </tr>
  612. <tr>
  613. <td class="z-samp">methodName</td>
  614. <td>必须</td>
  615. <td>调用的类的方法名,如doTestInterceptor</td>
  616. </tr>
  617. <tr>
  618. <td class="z-samp">async</td>
  619. <td>true</td>
  620. <td>异常还是同步调用,默认异步,true|false</td>
  621. </tr>
  622. <tr>
  623. <td class="z-samp">params</td>
  624. <td>[]</td>
  625. <td>参数数组,可通过addParam();函数设置参数,如addParam("abc");</td>
  626. </tr>
  627. <tr>
  628. <td class="z-samp">callback</td>
  629. <td>null</td>
  630. <td>回调函数或回调elem的id<br>
  631. 1、函数的this为Z.Ajax对象,可以通过this.responseStatus和this.responseText获取结果状态和结果文本<br>
  632. 2、回调ID时,填写elem的id,即把this.responseText的值填充到elem中,有三种填充方式,见callbackMethod参数
  633. </td>
  634. </tr>
  635. <tr>
  636. <td class="z-samp">callbackMethod</td>
  637. <td>"html"</td>
  638. <td>回调ID时的方法,三种"html"|"text"|"val"</td>
  639. </tr>
  640. <tr>
  641. <td class="z-samp">callScript</td>
  642. <td>true</td>
  643. <td>是否在AJAX结果的改变重置由data-role的缓存,如Z.Tooltip,Z.Select等,true|false,默认true</td>
  644. </tr>
  645. <tr>
  646. <td class="z-samp">loading</td>
  647. <td>null</td>
  648. <td>三种加载器,通过方法setLoading();方法来设置<br>
  649. 1、传入Z.loading对象,参数由对象指定,如ajax.setLoading(Z.loading({target: "testLoading3", shadow: true, position: 1}));
  650. 2、传入target和是否遮罩,如ajax.setLoading(document, true);或无遮罩ajax.setLoading(document);
  651. 3、传入targetId和是否遮罩,如ajax.setLoading("testLoading3", true);或无遮罩ajax.setLoading("testLoading3");
  652. 4、传入一个函数,在加载时回调该函数,如ajax.setLoading(function(){});此方式用于自定义操作
  653. </td>
  654. </tr>
  655. <tr>
  656. <td class="z-samp">loadingParam</td>
  657. <td>null</td>
  658. <td>加载器参数,通过方法setLoading();方法来设置,是第二个参数<br>
  659. 1、当loading是Z.loading和字符串时表示是否遮罩<br>
  660. 2、当#ID时指定的HTML,成功后换回原始HTML
  661. </td>
  662. </tr>
  663. <tr>
  664. <td colspan="3" class="z-text-cyan">响应参数</td>
  665. </tr>
  666. <tr>
  667. <td class="z-samp">responseStatus</td>
  668. <td>0</td>
  669. <td>响应状态,0表示成功,601-603表示跳转,其他表示错误</td>
  670. </tr>
  671. <tr>
  672. <td class="z-samp">responseText</td>
  673. <td>null</td>
  674. <td>响应文本字符串,默认是text/plain格式,XML或JSON格式自行转化</td>
  675. </tr>
  676. </table>
  677. </div>
  678. <!-- 右侧demo ZmUI代码 -->
  679. ${zhiqim_turorial_ZmUI_demo_start()}
  680. <div class="z-bar-top">
  681. <a href="#" class="z-left"><i class="z-font z-rem18 z-arrowhead-left"></i></a>
  682. <div class="z-title">ZhiqimUI.mobile</div>
  683. </div>
  684. <div class="z-bar-bottom">
  685. <a href="#" class="z-direction-column z-active"><i class="z-font z-apps"></i><span class="z-mg-t3">文案</span></a>
  686. <a href="#" class="z-direction-column"><i class="z-font z-apps"></i><span class="z-mg-t3">文案</span></a>
  687. <a href="#" class="z-direction-column"><i class="z-font z-apps"></i><span class="z-mg-t3">文案</span></a>
  688. <a href="#" class="z-direction-column"><i class="z-font z-apps"></i><span class="z-mg-t3">文案</span></a>
  689. </div>
  690. <div class="z-container">
  691. <div class="z-flexBox-list z-h100p"><div class="z-rem30 z-text-center">这里是内容</div></div>
  692. </div>
  693. ${zhiqim_turorial_ZmUI_demo_end()}
  694. <!-- content结束 -->
  695. </div>
  696. ${zhiqim_com_chapter()}
  697. <!-- 主体结束 -->
  698. </div>
  699. <!-- 容器结束 -->
  700. </div>
  701. ${zhiqim_com_footer()}