簡體   English   中英

如何從Objective C方法將包含JSON的JSON NSString傳遞給Javascript方法

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

我有一個要求, 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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM