Я постараюсь дать вам простую демонстрацию для этого - вы можете проверить этот урок на 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 работает в «асинхронной» модели (если вы не укажете его для синхронизации), поэтому вы просто запускаете , но не получит ответ в этом методе -
[self.webview stringByEvaluatingJavaScriptFromString:@"fetchPage();"
Итак, вот хитрость для выполнения обратного вызова javascript, уведомляющего ваше веб-представление -
- (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 -
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;
}