3

I ask the browser to POST JSON data to the stream v0.5.5 server using ajax. In the server side, how can I receive the data from the ajax request?

My client:(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;
}

My server:

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();
}

Again, I don't want the browser to ask for data from the server! What am I doing is to asking the browser to submit the JSON data via ajax, and I just don't know how the server (Rikulo Stream v0.5.5) gets the "content" of data? All code is written in Google Dart Language M3. No Javascript!

Rhumborl
  • 16,349
  • 4
  • 39
  • 45
Allen Wayne
  • 121
  • 6

1 Answers1

1

POST is not supported well in Dart SDK, but Dart team planned to enhance it. Please stargaze it here: issue 2488.

On the other hand, since what you handle is JSON, you can listen to HttpRequest (I'm assuming the latest SDK) and convert List to String and then to JSON. Rikulo Commons provides a utility to simplify the job as follows:

import "package:rikulo_commons/io.dart";

IOUtil.readAsJson(request, onError: connect.error).then((jsonValue) {
   //handle it here
});
Tom Yeh
  • 1,987
  • 2
  • 15
  • 23