我想将 JSON 数据传递给与 web 视图相关的 javascript 函数。但我无法从 Javascript 函数中获取响应数据
Posted
技术标签:
【中文标题】我想将 JSON 数据传递给与 web 视图相关的 javascript 函数。但我无法从 Javascript 函数中获取响应数据【英文标题】:I want to pass JSON data to javascript function related to web view. But I am unable to get the response data from the Javascript function 【发布时间】:2018-01-30 16:14:42 【问题描述】:当打印 'b' 值时,我变得空了。表示我发送的数据有误。
我做错了吗?
这是我的代码:
斯威夫特 4.0
let inputPayload: Dictionary = ["wellname": ["answer": "firstName"]]
if JSONSerialization.isValidJSONObject(inputPayload)
do
let rawData =
try JSONSerialization.data(withJSONObject: inputPayload, options: [])
let b = webView.stringByEvaluatingjavascript(from: "downloadComplete(\(rawData))") !
print(b)
catch
这是我的 Javascript 函数
function downloadComplete(a)
return a.wellname.answer
【问题讨论】:
你的尝试是错误的try let rawData = JSONSerialization.data(withJSONObject: inputPayload, options: []); let b = webView.stringByEvaluatingJavaScript(from: "downloadComplete(\(rawData))") ! print(b); catch
这对我不起作用。仍然没有用。
【参考方案1】:
Objective-c
- (void)runJavaScriptCallback:(NSString *) jsonString
NSString *exec_template = @"downloadComplete(\'%@\');";
NSString *exec = [NSString stringWithFormat:exec_template, jsonString];
[webView evaluateJavaScript:exec completionHandler:nil];
斯威夫特 4
func runJavaScriptCallback(jsonString: String)
webView.evaluateJavaScript("downloadComplete(\(jsonString))") result, error in
guard error == nil else
print(error)
return
Javascript
var downloadComplete = (bridgeMsg) =>
// escape newline character from ios sdp
bridgeMsg = bridgeMsg.replace(/\r?\n|\r/g, '\\r\\n');
const msg = JSON.parse(bridgeMsg);
// do whatever you want with the parsed json object
;
【讨论】:
您正在传递一个 jsonString 。但是在 java 脚本函数中,我们使用的是 json 对象。那么它将如何为我们提供解决方案。 您可以在 JS 领域轻松解析 JSON 字符串。我已经更新了我的答案。 非常感谢,伙计!以上是关于我想将 JSON 数据传递给与 web 视图相关的 javascript 函数。但我无法从 Javascript 函数中获取响应数据的主要内容,如果未能解决你的问题,请参考以下文章
在 knockout.js 中将 observable 从一个视图模型传递到另一个视图模型