理解使用这个(或其他JavaScript)函数的XMLHttpRequest响应?

有没有办法让iPhone / iPad访问XMLHTTPRequests,即从UIWebView内的网页ajax响应。 我已经尝试了一些解决scheme,在那里响应的URL被更改,以便应用程序可以确定它确实是一个Ajax响应。

我是新来的阿贾克斯,但我渴望学习。 我只是徘徊,如果有人能告诉我来自Ajax和接收浏览器的响应之间的相关性。

让它通过iOS的uiwebview工作将是一个额外的好处。

到目前为止我正在尝试

ajax_handler.js

 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(); } 

Objective C

 JSHandler = [[NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"ajax_handler" withExtension:@"js"] encoding:NSUTF8StringEncoding error:nil] retain]; - (void)webViewDidStartLoad:(UIWebView *)webView { [webView stringByEvaluatingJavaScriptFromString:JSHandler]; } 

我从这里得到,我不明白这个JavaScript将如何让我以后访问从服务器上的ajax脚本返回的ajax响应

我将尝试给你一个简单的演示 – 你可以检查本教程的AJAX – http://www.w3schools.com/ajax/default.asp

 function ajax (url, onsuccess) { var xhr = new XMLHttpRequest(); xhr.open ("GET", url); xhr.send (); xhr.onreadystatechange = function (event) { //alert (xhr.responseText); try { switch (xhr.readyState) { case 0: break; case 1: break; case 2: break; case 3: break; case 4: //alert (xhr.statusText); //alert (onsuccess); onsuccess (xhr.responseText, xhr.statusText, xhr.status); break; default: break; } } catch (e) { } } } // call back when ajax is done function onSuccessCallback (data, statusText, status) { //alert (data); } function fetchPage () { ajax ("http://your domain is here", onSuccessCallback); } 

然后你可以在你的代码中使用这个函数来调用这个函数,这会触发ajax调用,但是ajax工作在“asynchronous”模式(如果你没有指定它同步),所以你只需要触发它,没有得到这种方法的反应 –

 [self.webview stringByEvaluatingJavaScriptFromString:@"fetchPage();" 

所以这里是做javascript调用的一个技巧通知你的webview –

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { // check the request, if it's ajax callback, just return NO; other wise YES; NSURLRequest *request = [self.webview request]; NSURL *url = [request URL]; NSString *file = [url lastPathComponent]; if ([file isEqualToString:@"ajaxcallback.htm"] == YES) { // that means the ajax call is done, so you can call this NSString *result = [self.webview stringByEvaluatingJavaScriptFromString:@"getResponse ();"]; // don't forget to stop loading this fake page return NO; } } 

修改ajax的callback函数 –

 var response; function onSuccessCallback (data, statusText, status) { // store the data to global variable response = data; // trigger webview to load a new page, but actually stop loading in delegate window.location = "http://www.domain.com/ajaxcallback.htm"; } // call this in your objective C code function getResponse () { return response; }