Your if incorrect: the function is called several times, but only once http.readyState = 4 . This way you print error messages, although there are no errors yet.
You must first check to see if http.readyState = 4 , and then look at the status code.
Here is a minimal working example:
import QtQuick 1.1 Rectangle { Component.onCompleted: { var http = new XMLHttpRequest() var url = "http://localhost:8080"; var params = "num=22&num2=333"; http.open("POST", url, true); // Send the proper header information along with the request http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.setRequestHeader("Content-length", params.length); http.setRequestHeader("Connection", "close"); http.onreadystatechange = function() { // Call a function when the state changes. if (http.readyState == 4) { if (http.status == 200) { console.log("ok") } else { console.log("error: " + http.status) } } } http.send(params); } }
I created a local pseudo-web server with netcat to test it:
% echo -e 'HTTP/1.1 200 OK\n\n' | nc -l 8080 POST / HTTP/1.1 Content-Type: application/x-www-form-urlencoded;charset=UTF-8 Content-Length: 15 Connection: Keep-Alive Accept-Encoding: gzip Accept-Language: de-DE,en,* User-Agent: Mozilla/5.0 Host: localhost:8080 num=22&num2=333
source share