如何将包含JSON的JSON NSString从Objective C方法传递给Javascript方法

How to Pass JSON NSString containing JSON to a Javascript Method from an Objective C method

本文关键字:方法 JSON Javascript Objective 包含 NSString      更新时间:2023-09-26

我有一个要求,其中objective C code should消耗WebService,并且在JSON format中收到的响应必须作为参数传递给javascript方法以进行进一步处理。我正在使用UIWebView,它将在处理JSON response.后显示适当的结果当我试图将JSON字符串传递给Javascript方法时,问题就出现了。Javascript方法不简单地接受输入。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    NSString *responseString = [[NSString alloc] initWithBytes:[resultData bytes] length:[resultData length] encoding:NSUTF8StringEncoding];
    NSLog(@"%@",responseString);
    [self returnResponseToJavaScriptMethods:responseString];
}

-(void)returnResponseToJavaScriptMethods:(NSString*)theResponse{
    [viewMainWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"retrieveServerResponse('%@')",theResponse]];
}

有什么我错过了吗?使用相同的方法可以正确地传递简单字符串。

:将responseData编码为UTF8StringEncoding就成功了。

[theResponse stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]

您可能需要在将JSON字符串发送到javascript之前对其进行url转义。

尝试更改:

-(void)returnResponseToJavaScriptMethods:(NSString*)theResponse{
  [viewMainWebView stringByEvaluatingJavaScriptFromString:
  [NSString stringWithFormat:@"retrieveServerResponse('%@')",theResponse]];
}

-(void)returnResponseToJavaScriptMethods:(NSString*)theResponse{
  [viewMainWebView stringByEvaluatingJavaScriptFromString:
  [NSString stringWithFormat:@"retrieveServerResponse('%@')",
 [theResponse stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
} 

看看能不能帮到你。但是请注意,还有更好的(或更可靠的)转义字符串的方法,例如下面给出的答案:我如何对字符串

进行URL编码?

javascript中不需要retrieveServerResponse(),只需在iOS中对字符串进行百分比转义后使用unescape(percentEscapedStringFromiOS)

NSString *encodedString = [string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// CAVEAT: unescape('"%@'") is important since "'" (single quote) isn't excaped by the above function!
NSString *jsString = [NSString stringWithFormat:@"myJSstring = unescape('"%@'")", encodedString]];
NSString *jsResult = [self.webView stringByEvaluatingJavaScriptFromString:jsString];