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

我有一个要求,即objective C code should使用WebService并且以JSON format接收的响应必须作为参数传递给javascript方法以进行进一步处理。我正在使用UIWebView ,它将在处理JSON response.后显示相应的结果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)后使用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];