1

我尝试在 Dart 中提交一个简单的 POST HttpRequest。根据文档,该方法应该request.onLoad.add代替request.onLoad.listen,这是我正在使用的方法。然而我来到这里是因为 `onLoad.add' 不存在。:O 问题:没有错误,没有提交,没有成功消息。

void main() {
  query("#sample_text_id")
    ..text = "Click me!"
    ..onClick.listen(submitHttpRequest('test.php'));
}

void submitHttpRequest(String phpFile, [json, callback(int status)]) {
  print('yeeep');
  var request = new HttpRequest();
  request.open('POST', 'php/$phpFile');
  request.onLoad.listen((event) { print('event'); }, onDone: ()
   {
      print('loaded');
      handleResponse(request.status);
      if(callback != null) {
        callback(request.status);
      }
   }, onError: (e) { print('err' + e.toString()); });


}

输出是

Invalid CSS property name: -webkit-touch-callout
yeeep

我不知道第一行是从哪里来的,我很确定那是生成的,而且我的代码都没有。

4

2 回答 2

1

默认HttpRequest构造函数上的文档似乎已过时。

为了使它工作:

  • 您必须request.send();在末尾添加submitHttpRequest才能发送请求。
  • 修复您在点击时添加侦听器的方式。在您的原始代码中,您将submitHttpRequest('test.php')(即null)的结果添加到..onClick.listen(). 你应该做的:..onClick.listen((_) => submitHttpRequest('test.php'))

这是工作版本:

import 'dart:html';

void main() {
  query("#sample_text_id")
    ..text = "Click me!"
    ..onClick.listen((_) => submitHttpRequest('test.php'));
}

void submitHttpRequest(String phpFile, [json, callback(int status)]) {
  print('yeeep');
  var request = new HttpRequest();
  request.open('POST', 'php/$phpFile');
  request.onLoad.listen((event) { print('event'); }, onDone: () {
    print('loaded');
    handleResponse(request.status);
    if(callback != null) {
      callback(request.status);
    }
  }, onError: (e) { print('err' + e.toString()); });
  request.send(json);
}
于 2013-08-08T06:48:36.910 回答
0

您需要在最后一步发送请求:

request.send();

我通常更喜欢使用以下更简单的方法:

HttpRequest.getString(URL)
.then((stringResponse) { print("loaded"); } )
.catchError((error) { print("error: $error"); } );
于 2013-08-08T06:52:43.067 回答