2

我目前正在从 dart 调用 JavaScript 中的函数,该函数接受 JSON 字符串和成功回调。

JavaScript 的回调应该以 JSON 字符串的形式返回响应。但是,我无法从 dart 中返回的代理获取此信息。调试时,我在 Proxy 上看到的只有 _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?
}
4

1 回答 1

2

js.Proxy当返回的类型不是bool、或时num,使用该对象。当 a返回时,您必须知道底层 Js 对象的结构是什么才能使用它。例如,如果 Js 对象是XMLHttpRequest,您将能够像这样使用它:Stringhtml.Elementjs.Proxy

js.Proxy p = // proxy on XMLHttpRequest
String result = p.responseText; 
// '.responseText' is handled by noSuchMethod and the call is done on Js side

在您的情况下,如果response是 aProxy并且您想在 Dart 中复制 Json 结构,您可以使用:

import 'dart:convert';

String jsonValue = js.context.JSON.stringify(reponse);
Map dartJson = JSON.decode(jsonValue);

旁注:您必须使用Mapas 参数js.map(...)。在您的代码中,您使用String.

于 2013-09-17T06:55:15.900 回答