AJax技术

Hybrid--WebView中使用Ajax,webviewajax

字号+ 作者:H5之家 来源:H5之家 2017-06-08 13:00 我要评论( )

Hybrid--WebView中使用Ajax,webviewajax Hybrid框架下的app,使用的Ajax,需要注意的是UIWebViewDelegate不会监测到Ajax的reques

Hybrid--WebView中使用Ajax,webviewajax Hybrid框架下的app,使用的Ajax,需要注意的是UIWebViewDelegate不会监测到Ajax的reques...

Hybrid--WebView中使用Ajax,webviewajax

Hybrid框架下的app,使用的Ajax,需要注意的是UIWebViewDelegate不会监测到Ajax的request,也就是再执行Ajax代码时,shouldStartLoadWithReuqest等方法并不会被调用。

其解决方法需要Javascript和navtive code一起来做,其基本原理可参考这片文章,其流程是在

Javascript handler中每创建Ajax的请求时,需要将这段js存在ajax_handler.js放在app中

var s_ajaxListener = new Object(); s_ajaxListener.tempOpen = XMLHttpRequest.prototype.open; s_ajaxListener.tempSend = XMLHttpRequest.prototype.send; s_ajaxListener.callback = function () { window.location='mpAjaxHandler://' + this.url; }; XMLHttpRequest.prototype.open = function(a,b) { if (!a) var a=''; if (!b) var b=''; s_ajaxListener.tempOpen.apply(this, arguments); s_ajaxListener.method = a; s_ajaxListener.url = b; if (a.toLowerCase() == 'get') { s_ajaxListener.data = b.split('?'); s_ajaxListener.data = s_ajaxListener.data[1]; } } XMLHttpRequest.prototype.send = function(a,b) { if (!a) var a=''; if (!b) var b=''; s_ajaxListener.tempSend.apply(this, arguments); if(s_ajaxListener.method.toLowerCase() == 'post')s_ajaxListener.data = a; s_ajaxListener.callback(); }

其中的"mpAjaxHandler"为自定义的Scheme,用于区别request是否是由Ajax发出的。

在App端

获得js

static NSString *JSHandler; + (void)initialize { JSHandler = [[NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"ajax_handler" withExtension:@"js"] encoding:NSUTF8StringEncoding error:nil] retain]; }
载入页面后,执行这段js - (void)webViewDidStartLoad:(UIWebView *)webView { [webView stringByEvaluatingJavaScriptFromString:JSHandler]; }拦截住Request,不让webview的URL做出改变 #define CocoaJSHandler @"mpAjaxHandler" - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if ([[[request URL] scheme] isEqual:CocoaJSHandler]) { NSString *requestedURLString = [[[request URL] absoluteString] substringFromIndex:[CocoaJSHandler length] + 3]; NSLog(@"ajax request: %@", requestedURLString); return NO; } return YES; }

Ajax相关知识

Ajax作为异步Javascript广泛应用在web网站上。下面是一个来自于w3school的简单使用Ajax的例子:

<html> <head> <script type="text/javascript"> function loadXMLDoc() { var xmlhttp; var txt,x,i; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { xmlDoc=xmlhttp.responseXML; txt=""; x=xmlDoc.getElementsByTagName("title"); for (i=0;i<x.length;i++) { txt=txt + x[i].childNodes[0].nodeValue + "<br />"; } document.getElementById("myDiv").innerHTML=txt; } } xmlhttp.open("GET","http://www.w3school.com.cn/example/xmle/books.xml",true); xmlhttp.send(); } </script> </head> <body> <h2>My Book Collection:</h2> <div></div> <button type="button">GET Book List</button> </body> </html>
点击button,通过Ajax的方式获得书单。部分内容参考于stackoverflow

谁给个jquery中ajax使用的实例

好!
$.post( url , {id: 123,name : 'jake '},function(returndata){
alert(returndata);
});
----------------
很简单吧,不懂就追问哦,要谁为最佳哦,谢谢,^_*

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • SSH框架与AJAX技术的Java

    SSH框架与AJAX技术的Java

    2017-04-17 18:03

  • 使用 Dojo 的 Ajax 应用开发进阶教程,第 1 部分: JavaScript 技巧与高级特性

    使用 Dojo 的 Ajax 应用开发进阶教程,第 1 部分: JavaScript 技巧与

    2017-01-15 12:05

  • 移动应用开发中间件ExMobi

    移动应用开发中间件ExMobi

    2015-11-23 12:26

  • 《挑战JavaScript&Ajax应用开发》

    《挑战JavaScript&Ajax应用开发》

    2015-10-27 18:20

网友点评
#