4

objective C code shouldを消費し、WebService受信した応答をさらに処理するためJSON formatのメソッドに引数として渡す必要があるという要件があります。処理後に適切な結果を表示するメソッドを使用してい ます。JSON 文字列をに渡そうとすると、問題が発生します。method.Javascript メソッドは、単に入力を受け入れるわけではありません。javascriptUIWebViewJSON response.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]];
}

私が見逃しているものはありますか?? 同じアプローチを使用して、単純な文字列が適切に渡されます。

更新: to をエンコードするresponseDataUTF8StringEncodingうまくいきました。

[theResponse stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]
4

2 に答える 2

3

JavaScriptに投稿する前に、JSON文字列をURLエスケープする必要があります。

変更してみてください:

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

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

そして、それがあなたに役立つかどうかを確認してください。ただし、文字列をエスケープするためのより良い(またはより確実な)方法があることに注意してください。たとえば、次の回答で示されている方法です。文字列をURLエンコードするにはどうすればよいですか。

于 2013-01-07T15:05:00.730 に答える
0

iOS で文字列をパーセントエスケープした後にretrieveServerResponse()使用するだけです。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];
于 2015-04-22T15:28:29.507 に答える