我目前正在从 dart 调用 JavaScript 中的一个函数,该函数接受 JSON 字符串和成功回调。
来自 JavaScript 的回调应该以 JSON 字符串形式返回响应。但是我无法从 dart 中返回的代理获取此信息。调试时我在代理上看到的只有 _id、_port 和 hashCode。
我如何从代理获取所需的信息?
代码片段:
void init()
{
_mJSProxy= js.retain(new js.Proxy(js.context.Test));}
}
void testRequest(String p_request)
{
_mJSProxy.test(js.map(p_request), new js.Callback.once(onCallbackSuccess));
}
void onCallbackSuccess(var response, var httpRequest)
{
// response & httpRequest is a Proxy
// How to get the required information from them?
}
最佳答案
当返回类型不是bool
、num
、String
时,使用js.Proxy
对象或html.Element
。当返回 js.Proxy 时,您必须知道底层 Js 对象的结构是什么才能使用它。例如,如果 Js 对象是 XMLHttpRequest你将能够像这样使用它:
js.Proxy p = // proxy on XMLHttpRequest
String result = p.responseText;
// '.responseText' is handled by noSuchMethod and the call is done on Js side
在您的情况下,如果 response
是 Proxy
并且您想在 Dart 中复制 Json 结构,您可以使用:
import 'dart:convert';
String jsonValue = js.context.JSON.stringify(reponse);
Map dartJson = JSON.decode(jsonValue);
旁注:您必须使用 Map
作为 js.map(...)
的参数。在您的代码中,您使用String
。
关于dart - 如何在 dart 中使用 javascript 返回的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18840391/