Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可能有一个自包含的JS/HTML(jQuery)文件,在本地模拟AJAX调用?_Javascript_Jquery_Html_Ajax - Fatal编程技术网

Javascript 是否可能有一个自包含的JS/HTML(jQuery)文件,在本地模拟AJAX调用?

Javascript 是否可能有一个自包含的JS/HTML(jQuery)文件,在本地模拟AJAX调用?,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我想创建一个发布示例,它是一个自包含的HTML文件,可以在本地模拟AJAX调用(即,如果该文件位于本地PC文件系统上,并且在浏览器中以file:///path/to/file.htm) 我得出了下面的例子,它不起作用。我想在那里做的是单击“获取数据!”按钮,该按钮使用查询字符串参数shdat向同一页面发起请求;然后在JS中,如果页面检测到查询字符串shdat,它应该停止进一步加载页面,并将当前文档替换为字符串(我们正在“发送”的数据),以便“asker”将其作为AJAX调用的响应(并最终在div

我想创建一个发布示例,它是一个自包含的HTML文件,可以在本地模拟AJAX调用(即,如果该文件位于本地PC文件系统上,并且在浏览器中以
file:///path/to/file.htm

我得出了下面的例子,它不起作用。我想在那里做的是单击“获取数据!”按钮,该按钮使用查询字符串参数
shdat
向同一页面发起请求;然后在JS中,如果页面检测到查询字符串
shdat
,它应该停止进一步加载页面,并将当前文档替换为字符串(我们正在“发送”的数据),以便“asker”将其作为AJAX调用的响应(并最终在div
dataholder
中显示)

以下是我的例子:


.my_btn{背景色:黄色;}
.dispnone{display:none}
var thisreff=window.location.href.slice(0,window.location.href.indexOf(“?”)+1);
var qstr=window.location.href.slice(window.location.href.indexOf('?')+1);
控制台日志(“qstr”,qstr);
如果(qstr==“shdat”){
//中断正常页面加载:
window.stop();
//将目前为止的整个页面替换为我们的“数据”,
//这将有效地“发送回”给“询问者”?
//(不起作用)
$(document.html(“发送一些消息”);
}
功能OnGetdata(inbtn){
console.log(“OnGetdata”);
// http://stackoverflow.com/questions/4656843/jquery-get-querystring-from-url
$.ajax(thisref+“?shdat”{
成功:功能(数据){
控制台日志(“数据”,数据);
},
错误:函数(xhr、ajaxOptions、thrownError){
log(“错误”+thisref+”:“+xhr.status+”/“+thrownError”);
}
});
}
ondocready=函数(){
$(“#获取数据”)。单击(函数(){
OnGetdata(本);
});
}
$(文件).ready(ondocready);
你好,世界!
以下是测试:

获取数据!
问题是,这里的Ajax调用将完成,但是
console.log(“data”,data)
将显示一个
XMLDocument
,它基本上是整个页面,而不仅仅是数据


这样做可能吗?如果可能,怎么做?

好吧,我想,问题是当调用
文件://
时,根本没有任何东西可以解释数据-这就像在Unix上执行
cat somefile.txt
;您只需获取原始内容,
cat
本身无法进行任何处理

因此,当Ajax调用运行时,它只是将整个文件作为文本字符串读取,而任何东西(包括浏览器)都不会对其进行解释,因此我在那里使用的JS开关基本上不会运行

一个快速的解决方法是使用PHP;并且具有PHP中的切换部分(对查询字符串的存在作出反应)(特别是Ubuntu/Debian上所称的
PHPCLI
,它可能具有服务器功能开关
-S
,但不是完整的PHP安装);然后,如果您的文件位于
~/Desktop/tmp.php
中,只需运行

php -S localhost:8080
。。。在同一文件夹(
~/Desktop
)中,然后在浏览器中访问:
http://localhost:8080/tmp.txt
。这就是应该如何更改OP文件,使其在PHP下按预期工作-我们现在可以称之为
tmp.PHP


.my_btn{背景色:黄色;}
.dispnone{display:none}
var thisreff=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”){
//~//中断正常页面加载:
//~window.stop();
//~//用我们的“数据”替换目前为止的整个页面,
//~//哪一个将有效地“发回”给“询问者”?
//~//(不起作用)
//~$(document.html(“发送一些消息”);
//~ }
功能OnGetdata(inbtn){
console.log(“OnGetdata”);
// http://stackoverflow.com/questions/4656843/jquery-get-querystring-from-url
$.ajax(thisref+“?shdat”{
成功:功能(数据){
控制台日志(“数据”,数据);
},
错误:函数(xhr、ajaxOptions、thrownError){
log(“错误”+thisref+”:“+xhr.status+”/“+thrownError”);
}
});
}
ondocready=函数(){
$(“#获取数据”)。单击(函数(){
OnGetdata(本);
});
}
$(文件).ready(ondocready);
你好,世界!
以下是测试:

获取数据!

现在,当我单击“获取数据!”按钮时,我会在JavaScript控制台中看到“数据发送一些消息”,这就是我希望OP执行的操作…

您希望通过脚本在本地执行的任何操作通常都会被浏览器上的安全措施所禁止。他们只是不允许本地文件访问(大多数时候)。如果您希望在本地进行模拟,请安装一个类似apache的服务器,安装速度很快,然后您就有了一个好的模拟器。如果你不能安装Apache考虑编写一个本地应用程序(SytActiveX,ApplixExplorer,SurvitiveBadiDa),谢谢,@ MigeldibBET-我甚至没有考虑安全考虑,很好地记住这一点!我只是认为在
文件://
协议中,没有什么真正需要解释的,所以我设法在PHP中做了我想要做的事情(发布为下面的答案)。如果您在本地安装PHP,您也可以安装xampp并获得整个(L)AMP堆栈。。。然后你可以做所有的事情-HTML,PHP,甚至AJAX:)谢谢@gibberish-在Ubuntu/Debian上,有一个独立的包
PHPCLI
,支持服务器功能(5.3或5.4之后,不记得了),但只用于命令行,它不是完整的PHP-所以我真的很高兴我能做到这一点,没有安装一个完整的LAMP堆栈
:)
对不起,我没意识到你在Linux上。。。道歉。