Код dart2js не может загрузить ответы http

Этот код дротика отправляет строку json следующему коду на стороне сервера и получает ответ. Код дротика работает. Но js-код, скомпилированный с помощью dart2js, не может загрузить http-ответ с ошибкой. Это ошибка в dart2js? Или я что-то не так делаю?

Клиентский код:

import 'dart:html';
import 'dart:convert';

void main() {
  querySelector(".button").onClick
    .listen( (e) {
      String url = 'http://127.0.0.1:8480';
      HttpRequest request = new HttpRequest();
      Map data = {
          "int value" : 1,
          "string value": 'Dartlang.'
      };
      String jsonData = JSON.encode(data);
      print("json data sent = " + jsonData);
      request
      ..open("POST", url, async: true)
        ..onLoadStart.listen((e) => print("Started loading"))
        ..onError.listen( (e) =>( print("Error occurred.")))
        ..onTimeout.listen((e) => (print("Server is not responding.")))
        ..onLoad.listen( (e) => (print("Response text = ${request.responseText}")))
            ..send(jsonData);
          });
}

Серверный код:

import 'dart:io';
import 'dart:async';
import 'package:http_server/http_server.dart';

void main() {
  print("Listening for HTTP Requests...");

  final HOST = InternetAddress.ANY_IP_V6;
  final PORT = 8480;

  HttpServer.bind(HOST, PORT).then((server) {
    server.transform(new HttpBodyHandler())
    .listen((HttpRequestBody body) {
      HttpRequest request = body.request;
      print("Recieved request from: ${request.connectionInfo.remoteAddress.address}"); 
      var response = request.response;
      addCorsHeaders(response);
      response.write("You sent: ${body.body}");
      response.close();
    });
  });

}

void addCorsHeaders(HttpResponse res) {
  res.headers.add("Access-Control-Allow-Origin", "*, ");
  res.headers.add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
  res.headers.add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
}

HTML:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>HttprequestTester</title>
    <link rel="stylesheet" href="httprequesttester.css">
  </head>
  <body>
    <button class='button'>Send HTTP Request</button>

    <script type="application/dart" src="httprequesttester.dart"></script>
    <script src="packages/browser/dart.js"></script>
  </body>
</html>

person Nawaf Alsulami    schedule 27.12.2013    source источник
comment
Этот прослушиватель ..onError.listen( (e) =>( print("Error occurred."))) сообщает об ошибке, а прослушиватель onLoad никогда не срабатывает в коде js.   -  person Nawaf Alsulami    schedule 27.12.2013
comment
И каково значение e в слушателе?   -  person MarioP    schedule 27.12.2013
comment
e = экземпляр «ProgressEvent»   -  person Nawaf Alsulami    schedule 27.12.2013
comment
Тогда это ошибка HTTP, если я не ошибаюсь. Каково значение request.readyState и request.status в onError.listen()?   -  person MarioP    schedule 27.12.2013
comment
request.readyState = 4. request.status = 0. Статус запроса должен быть 200, верно? Эта ошибка отображается только в Firefox. Хром в порядке.   -  person Nawaf Alsulami    schedule 27.12.2013
comment
О боже, ужасный статус 0. Это может быть трудно отследить. Не могли бы вы попробовать удалить обработчик ошибок и заглянуть в консоль браузера? Надеюсь, будет сообщение об ошибке, с которым можно будет работать.   -  person MarioP    schedule 27.12.2013
comment
Я удаляю прослушиватель onError, но ничего не появляется. Слушатель onLoad не срабатывает. Я добавил прослушиватель onLoadEnd, который срабатывает, но с пустым ответом, request.readyState = 4 и request.status = 0.   -  person Nawaf Alsulami    schedule 28.12.2013


Ответы (2)


Я попробовал ваш код, и он работает в Dartium (версия 31.0.1650.48 (240209)), Chrome (версия 31.0.1650.63) и Firefox (26.0) на Debian Linux x64.

Но мне интересно, почему это работает, когда вы обслуживаете IPv6 и получаете доступ, используя адрес IPv4. Но я не специалист в этих вопросах.

person Günter Zöchbauer    schedule 27.12.2013
comment
Я использую ту же версию Firefox на Ubuntu 13.10 x64. Я только что попробовал Chrome, и код работает, но не в Firefox. - person Nawaf Alsulami; 27.12.2013