Я придумал это (возможно, не очень красивое) решение:
Вместо того, чтобы возвращать ответ только для json, я использую тот же шаблон HTML, который я использовал для капчи. Если капча прошла успешно, я отправляю json, который хочу, в шаблон HTML, который отображает его в скрытом div с идентификатором:
<html>
<body>
{% if captcha_success %}
<div id="json" style="display: none">{"jsonvalue":"{{result}}"}</div>
{% else %}
// display captcha as usual
{% endif %}
</body>
</html>
и затем я могу получить содержимое в webViewDidFinishLoad, используя:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *res = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('json').innerHTML"];
NSDictionary *json = [[CJSONDeserializer deserializer] deserializeAsDictionary:[res dataUsingEncoding:NSUTF8StringEncoding] error:nil];
// more stuff
}
Обычно я думаю, что это было довольно легко и просто реализовать.