(Answer below assumes, as it seems, you are not deploying this HTML file in the http://www.deeptraining.com/.)
Your code is actually attempting to make a CORS request, not an ordinary POST.
Modern browsers will only allow Ajax calls to pages in the same domain as the source HTML page.
In other words, whenever the HTML page that tries to make an Ajax request is not on the same domain as the target URL (in your case, www.deeptraining.com
), the browser won't make the call (as you'd expect). Instead, it will try to make a CORS request.
CORS request? !@#$¨& is that?
Wikipedia says: Cross-origin resource sharing (CORS) is a mechanism that allows a web page to make XMLHttpRequests
to another domain. Such "cross-domain" requests would otherwise be forbidden by web browsers, due to the same origin security policy.
To put it shortly, to perform a CORS request, your browser:
Will first send an OPTION
request to the target URL
- Your Firefox told you that:
And then only if the server response to that OPTION
contains the adequate headers to allow the CORS request, the browse will perform the call (almost exactly the way it would if the HTML page was at the same domain).
- If the expected headers don't come, the browser simply gives up (like it did to you).
How to solve it?
Unfortunately, there is nothing you can do about it other than deploying that HTML file in a server located at http://www.deeptraining.com/.
How about JSONP?
To use JSONP in this scenario, you'd have to change the service to return information via GET, as you can't POST using JSONP. (This answer points to some hacks, but that's going too far, I think.)
Oh man, no workarounds, then?
There is no clean workaround, really. You could set up an application (at the same domain of your HTML file) that forwards every TCP/IP request to http://www.deeptraining.com/, an then fool your browser. Or you could set up a mirror of that web service in you domain. You see, it all becomes too dirty from this point on, so good luck.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…