I would like to create an example for posting, which would be a self-contained HTML file, that could emulate an AJAX call locally (that is, if the file is on your local PC file system, and it opens in your browser as file:///path/to/file.htm
).
I have arrived at the following example, which doesn't work. What I want to do there, is click on the "Get Data!" button, which initiates a request to the same page with a query string parameter shdat
; then in JS, if the page detects the query string shdat
, it should stop further loading of the page, and replace the current document as a string (the data we're "sending"), so that the "asker" gets this as the response of the AJAX call (and ultimately shows it in div dataholder
).
Here is my example:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style type="text/css">
.my_btn { background-color:yellow; }
.dispnone { display:none }
</style>
<script src="http://code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
var thishref = window.location.href.slice(0, window.location.href.indexOf('?')+1);
var qstr = window.location.href.slice(window.location.href.indexOf('?')+1);
console.log("qstr", qstr);
if (qstr == "shdat") {
// interrupt normal page loading:
window.stop();
// replace entire page so far with our "data",
// which will effectively "send it back" to "asker"?
// (doesn't work)
$(document).html("Sending some message");
}
function OnGetdata(inbtn) {
console.log("OnGetdata");
// http://stackoverflow.com/questions/4656843/jquery-get-querystring-from-url
$.ajax(thishref + "?shdat", {
success: function(data) {
console.log("data ", data);
},
error: function(xhr, ajaxOptions, thrownError) {
console.log("error " + thishref + " : " + xhr.status + " / " + thrownError);
}
});
}
ondocready = function() {
$("#getdata").click(function(){
OnGetdata(this);
});
}
$(document).ready(ondocready);
</script>
</head>
<body>
<h1>Hello World!</h1>
<p>Here is the test:</p>
<button type="button" id="getdata" class="my_btn">Get Data!</button>
<div id="dataholder"></div>
</body>
</html>
The thing is, the Ajax call here will complete, but the console.log("data ", data);
will show an XMLDocument
, which is basically the whole page as it is - instead of the data only.
Is something like this possible to do, and if so, how?