[最佳答案] This setup should work better for your needs: var req = new XMLHttpRequest(); req.open('POST', '/upload_image'); req.onreadystatechange = function (aEvt) { if (req.readyState == 4) { if(req.status == 200) alert(req.responseText); else alert("Error loading page\n"); } }; req.send(formData); In your code error callback is never called because it is only triggered by network-level errors, it ignores HTTP return codes.