2013-01-07 46 views
4

傳遞一個包含JSON的NSString JSON到一個Javascript方法I有一個要求,其中objective C code should消耗WebServiceJSON format接收的響應具有作爲參數傳遞給用於進一步處理javascript方法傳遞。我使用UIWebView這將顯示處理JSON response. 的問題出現後,相應的結果,當我嘗試通過JSON字符串Javascript method.Javascript方法不是簡單地接受輸入。如何從目標C方法

- (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]]; 
} 

有什麼我錯過了?簡單的字符串使用相同的方法正確傳遞。

UPDATE: 編碼responseDataUTF8StringEncoding的伎倆。

[theResponse stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding] 

回答

3

您可能需要在發佈到JavaScript之前先將URL轉義爲JSON字符串。

嘗試改變:

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

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

,看看是否可以幫助你。但是請注意,有更好(或更萬無一失的)的方式來逃避字符串,例如在這個答案給出的:How do I URL encode a string

+0

非常感謝您的suggestion.It工作就像一個charm.But需要清理被轉換爲一個適當的JSON response.That是給現在我們與轉義字符填充字符串我另一個頭痛。請在評論中提及,如果你知道一種方法來完美顛倒JavaScript中的編碼。 –

+0

我不知道它是否「完美」,但是您是否嘗試過使用unescape()函數?它應該工作,只是'UNESCAPE(your_escaped_json_string)' – uvesten

+0

我改變了我的編碼approach.I剛剛編碼/使用Base64編碼解碼。 –

0

有沒有必要在JavaScript中的retrieveServerResponse(),只需使用unescape(percentEscapedStringFromiOS)您%的轉義後在iOS中的字符串

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];