Mochikit で POST

POST はできないよーなこと書いてんのもあったけど http://bob.pythonmac.org/archives/2005/09/09/mochikit-cons-or-not/ こんなのが見つかった。

AJAX library (called 'Deferred') has limited functionality -- no POST, no access to result in XML, no ability to access HTTP status in error handling.

Wrong, wrong, wrong, and wrong.

To do a POST (or any other verb), use getXMLHttpRequest() and set one up, use sendXMLHttpRequest(req, postData) to fire it out. If you want an easy way to build the post data, use queryString().

とすればいいそうなので、set one up って .open() のこと?とかわからんし、req って何渡せばいいのかもわからんが、とりあえずやってみる。
まぬある読んだら req は XMLHttpObject のことのようだ。Deferred を作ってくれるそうなので、.addCallbacks() しとけばいいんだろう。


html はこんなの置いといて

<form id="frm">
  <input type="text" name="key">
  <input type="button" id="submit">
</form>


javascript でこんなことして

window.onload = function(){ connect("submit", "onclick", post); }

var post = function(){
  var req = getXMLHttpRequest();
  req.open("post", "./path/to.cgi", true);
  var d = sendXMLHttpRequest(req, queryString("frm"));
  var good = function(res){
  	logDebug(res.responseText);
  }
  var bad = function(err){
  	logDebug(err);
  }
  d.addCallbacks(good, bad);
}


cgi はてきとーに

#! /perl/bin/perl -w

read(STDIN, $Q, $ENV{"CONTENT_LENGTH"});

print "Content-Type: text/plain\n\n";
print $ENV{"REQUEST_METHOD"}."->".$Q;
exit;

うわぁ、てきとーすぎだろ。


しかしまぁ、無事 POST できたようだ。