我想将 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 从一个视图模型传递到另一个视图模型

如何以编程方式在视图控制器之间传递数据?我想将我的UITextfield数据传递给另一个视图控制器[重复]

我想将 ios Web 视图的内容导出为 html

将 json 数组传递给 REST Web API

swiftui将变量传递到另一个视图