Mental note to myself:

When making a POST request with XMLHttprequest and Safari(v2.0.4), always generate some content for the browser.

If not, the status will always be undefined.

if (!$mysqli->query($insert)) {
  trigger_error("error writing data: ".$insert);
else {
  echo "0";

This costed me some hours pulling my hair,.
The following javascript works like a charm when you return a “0″ at the end of the php file called with POST. If you don’t return anything, Safari will decide that the HTTP headers are undefined and thus call the error handler.

  var req=this.req;
  var ready=req.readyState;
  if (ready==KwAjax.READY_STATE_COMPLETE){
      var httpStatus=req.status;
      if (httpStatus == 200 || httpStatus == 0) {;
      else {;