3

ajax を使用して、ブラウザーに JSON データをストリーム v0.5.5 サーバーに POST するように依頼します。サーバー側では、どのように ajax リクエストからデータを受け取ることができますか?

私のクライアント:(Google Chrome)

void ajaxSendJSON() {
  HttpRequest request = new HttpRequest(); // create a new XHR

  // add an event handler that is called when the request finishes
  request.onReadyStateChange.listen((_) {
    if (request.readyState == HttpRequest.DONE &&
      (request.status == 200 || request.status == 0)) {
      // data saved OK.
      print(request.responseText); // output the response from the server
    }
  });

  // POST the data to the server
  var url = "/news";
  request.open("POST", url, true);
  request.setRequestHeader("Content-Type", "application/json");
  request.send(mapTOJSON()); // perform the async POST
}

String mapTOJSON() {
  print('mapping json...');
  var obj = new Map();
  obj['title'] = usrTitle.value == null ? "none" : usrTitle.value;
  obj['description'] = usrDesc.value == null ? "none" : usrDesc.value;
  obj['photo'] = usrPhoto.value == "none";
  obj['time'] = usrTime==null ? "none" : usrTime.value; 
  obj['ip']= '191.23.3.1';
  //obj["ip"] = usrTime==null? "none":usrTime; 
  print('sending json to server...');
  return Json.stringify(obj); // convert map to String i.e. JSON
  //return obj;
}

私のサーバー:

void serverInfo(HttpConnect connect) {
  var request = connect.request;
  var response = connect.response;
  if(request.uri.path == '/news' && request.method == 'POST') {
    response.addString('welcome from the server!');
    response.addString('Content Length: ');
    response.addString(request.contentLength.toString());
  } else {
    response.addString('Not found');
    response.statusCode = HttpStatus.NOT_FOUND;
  }
  connect.close();
}

繰り返しますが、ブラウザがサーバーにデータを要求するのは望ましくありません。私がやっていることは、ブラウザーに ajax 経由で JSON データを送信するように要求することですが、サーバー (Rikulo Stream v0.5.5) がデータの「コンテンツ」を取得する方法がわかりません。すべてのコードは Google Dart Language M3 で記述されています。Javascriptなし!

4

1 に答える 1

1

Dart SDK では POST は十分にサポートされていませんが、Dart チームはそれを拡張する予定です。ここで星を眺めてください: issue 2488 .

一方、扱うのは JSON なので、HttpRequest をリッスンして (最新の SDK を想定しています)、List を String に変換してから JSON に変換できます。Rikulo Commonsは、次のようにジョブを簡素化するユーティリティを提供します。

import "package:rikulo_commons/io.dart";

IOUtil.readAsJson(request, onError: connect.error).then((jsonValue) {
   //handle it here
});
于 2013-03-25T01:44:46.730 に答える