Skip to main content
2 of 3
added 119 characters in body
php_nub_qq
  • 715
  • 1
  • 6
  • 18

RESTful workaround

Well I met the RESTful ideology and I fell in love with it. However the only request methods supported by HTML forms so far are GET and POST, which is kind of sad, because this means that to use REST as it's supposed to be used I need to use some work around which is likely to not be pretty, as it really is.

So the only way I found I can send PUT or DELETE requests is from the XhrHttpRequest object in JavaScript.

How I send data seems pretty simple

xhr = new XMLHttpRequest();
xhr.open('PUT' /*for example*/, URL, true);
xhr.send('MyData=HelloWorld');

Then on the other side I fetch the data

class Input {
    private static $input;

    public static function init(){
        parse_str(file_get_contents('php://input'), self::$input);
    }
    
    public static function data($key = null){
        return $key ? self::$input[$key] : self::$input;
    }
}

Input::init();

My concern is that the header Content-Type is always text/plain;charset=UTF-8 no matter what the request type is, as opposed to using standard form submission, where Content-Type becomes application/x-www-form-urlencoded. I can of course put that on POST requests as well but in this case what should I put on PUT and DELETE requests?

Is there any potential problems I may run into with browsers by using this nonstandard method of sending requests, and do you see any drawbacks in general, apart the one that users who don't run JavaScript will be unable to use my site but who doesn't run JavaScript these days anyway.

P.S.: I was wondering, if it turned out OK to use this method, wouldn't it be more efficient and secure to use JSON formatting to send data instead of the query string one I have shown in the example? I primarily want to avoid the query string format because I remember reading that JavaScript's URL encoding functions aren't the best..

php_nub_qq
  • 715
  • 1
  • 6
  • 18