【发布时间】:2016-05-26 22:40:48
【问题描述】:
我想创建一个发布示例,它是一个自包含的 HTML 文件,可以在本地模拟 AJAX 调用(也就是说,如果该文件在您的本地 PC 文件系统上,并且它在您的浏览器为file:///path/to/file.htm)。
我已经到达了以下示例,它不起作用。我想在那里做的是点击“获取数据!”按钮,使用查询字符串参数shdat向同一页面发起请求;那么在 JS 中,如果页面检测到查询字符串shdat,它应该停止进一步加载页面,并将当前文档替换为字符串(我们正在“发送”的数据),以便“询问者”得到这是 AJAX 调用的响应(并最终显示在 div dataholder 中)。
这是我的例子:
<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>
问题是,此处的 Ajax 调用将完成,但 console.log("data ", data); 将显示 XMLDocument,它基本上是整个页面 - 而不仅仅是数据。
这样的事情可以做吗?如果可以,怎么做?
【问题讨论】:
-
您希望通过脚本在本地执行的任何操作通常都会受到浏览器安全措施的限制。他们根本不允许本地文件访问(大多数时候)。如果你想在本地模拟,安装一个像apache这样的服务器,设置起来很快,然后你就有了一个好的模拟器。如果您无法安装 apache,请考虑编写本机应用程序 (#activex #internetexplorer #securitybadidea)
-
谢谢@MichaelDibbets - 我什至没有想到安全方面的考虑,请记住这一点!我只是认为在
file://协议中,没有什么可以真正做解释,所以我设法在 PHP 中做我想做的事情(发布为下面的答案)。
标签: javascript jquery html ajax