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

标签 javascript iphone objective-c ios json

我有一个要求, Objective-C 代码应该 使用 WebService 并且以 JSON 格式接收的响应 必须作为javascript 方法的参数用于进一步处理。我正在使用 UIWebView,它将在处理 JSON 响应后显示适当的结果。 当我尝试将 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]]];
} 

看看这是否对您有帮助。但是请注意,有更好(或更可靠)的方法来转义字符串,例如此答案中给出的方法:How do I URL encode a string

关于javascript - 如何将包含 JSON 的 JSON NSString 从 Objective C 方法传递给 Javascript 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14198331/

相关文章:

javascript - 限制全日历中每天创建的事件数

javascript - 组件中无法访问 Angular 2 提供程序

javascript - 在 Chrome 扩展内的 iframe 内执行父窗口 JS

iphone - 使用 AVPlayer 流式传输 mp3 音频

iphone - iPhone 静音时的 UILocalNotification 警报

iphone - AVAudioRecorder 中的音量

javascript - 无法触发 Drum Machine 项目中的元素 (React)

iphone - 如何处理包含属性的 Objective-C 协议(protocol)?

ios - 如何只允许在场景中的特定区域进行触摸?

objective-c - 在运行时编辑存折通行证 (.pkpass) 文件?