Javascript 以上代码将在XHR请求中使用。如果您在将此问题与jQuery AJAX请求集成时需要帮助,请告诉我。
处理此问题将带您到任何地方。这是一项困难的任务,使用任何http服务器都可以轻松解决 如果您的问题是很难设置,请尝试以下方法: 在shell中,您进入文件所在的目录,然后键入Javascript 以上代码将在XHR请求中使用。如果您在将此问题与jQuery AJAX请求集成时需要帮助,请告诉我。,javascript,jquery,json,internet-explorer,jquery-data,Javascript,Jquery,Json,Internet Explorer,Jquery Data,处理此问题将带您到任何地方。这是一项困难的任务,使用任何http服务器都可以轻松解决 如果您的问题是很难设置,请尝试以下方法: 在shell中,您进入文件所在的目录,然后键入 http-server ./ -p 12345 其中,12345可以由您选择的任何有效且尚未使用的端口进行更改。jQuery.getJSON使用ajax .ajax使用XMLHttpRequest chrome和其他浏览器的web安全性会阻止XMLHttpRequest请求本地文件,因为这是一个安全问题 通过深度安全
http-server ./ -p 12345
其中,
12345
可以由您选择的任何有效且尚未使用的端口进行更改。jQuery.getJSON使用ajax
.ajax使用XMLHttpRequest
chrome和其他浏览器的web安全性会阻止XMLHttpRequest请求本地文件,因为这是一个安全问题
通过深度安全:本地网页
您收到一封来自攻击者的电子邮件,其中包含以下网页:
您下载的附件
您可以在浏览器中打开现在的本地网页
本地网页创建一个iframe,其源是
.
由于您已登录到Gmail,因此框架会将消息加载到中
你的收件箱
本地网页使用JavaScript读取框架的内容
无法访问框架[0]。document.documentElement.innerHTML。(互联网
网页将无法执行此步骤,因为它将出现
来自非Gmail来源;相同来源策略将导致读取
(失败)
本地网页会将收件箱的内容放入
并通过表单POST将数据提交到攻击者的web服务器。现在
攻击者拥有你的收件箱,这可能对垃圾邮件或垃圾邮件有用
识别盗窃行为
不需要同源策略安全性的数据解决方案是填充json。因为jsonp不是数据的安全格式。Jsonp没有相同的源策略
/* secured json */
{
"one": "Singular sensation",
"two": "Beady little eyes",
"three": "Little birds pitch by my doorstep"
}
/* padded json aka jsonp */
Mycallback ({
"one": "Singular sensation",
"two": "Beady little eyes",
"three": "Little birds pitch by my doorstep"
});
由于jsonp将json包装在一个有效的javascript函数中,因此可以像任何人向页面添加任何javascript一样打开json
var element = document.createElement("script");
element.src = "jsonp.js";
document.body.appendChild(element);
你的回调处理数据
function Mycallback(jsondata) {
}
这在功能上与ajax请求相同,但不同,因为它是一个jsonp请求,实际上更简单
jquerylibs也直接支持jsonp,请参见使用Flickr的jsonpapi的示例;除非意识到双重标准,否则他们甚至可能不会注意到正在使用jsonp
(function() { /* jsonp request note callback in url, otherwise same json*/
var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
$.getJSON( flickerAPI, {
tags: "mount rainier",
tagmode: "any",
format: "json"
})
.done(function( data ) {
$.each( data.items, function( i, item ) {
$( "<img>" ).attr( "src", item.media.m ).appendTo( "#images" );
if ( i === 3 ) {
return false;
}
});
});
})();
(function(){/*jsonp请求注释在url中回调,否则为相同的json*/
var flickerAPI=”http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
$.getJSON(flickeAPI{
标签:“雷尼尔山”,
tagmode:“任何”,
格式:“json”
})
.完成(功能(数据){
$.each(data.items,function(i,item){
$( "
可以启用对json的本地访问,但这取决于浏览器的不同
使用--允许从文件访问文件以在chrome中启用它
仅供参考:他们正在研究encripted json,我相当肯定,不会有任何方法在本地使用它,目的是使其真正、真正安全。@SuperHornet在IE中?没有。您在调试模式下看到任何数据吗?没有…@SuperHornetAlso转到Internet选项>高级选项卡,检查“启用活动内容以在我的计算机上的文件中运行”。你能用结果答复吗?nyro.net/data.json不存在…执行此操作后,我得到createActiveXHR()是未定义的
no。不过,我知道它在做什么。如果您使用CDN源文件,则显示如何正确提供FilePath的更新代码将无法脱机工作。这是一个很好的答案示例。但是,您忘记了一件事,jQuery动态创建函数名时,jsonp永远无法缓存,因为内容会发生更改,因此内容会不断更改这将阻止离线使用,我怀疑采访人员是否想更改浏览器启动参数来运行他的代码,如果人们不得不更改浏览器启动选项来使用它,这将打破Web应用程序的地位。。。
var activex; // save activex somewhere so that it only need to check once
if ( activex === undefined )
try {
new ActiveXObject("MSXML2.XMLHTTP.3.0");
activex = true;
} catch (e) {
activex = false
}
xhr = activex ? createActiveXHR() : createStandardXHR();
<html manifest="example.appcache">
AddType text/cache-manifest .appcache
CACHE MANIFEST
data.json
index.php
someimage.png
# continue for all the file needed for the web site to work
loadTasks([
{name:"Task 1", date:"Date 1", assigned:"John Doe"},
{name:"Task 2", date:"Date 2", assigned:"Jane Doe"}
]);
<script>
function loadTasks(tasks) {
$.each(tasks, function (i, task) {
$("#load_tasks").append(
"<div class='row'><span class='data-task'>" + task.name +
"</span> <span class='data-date'>" + task.date +
"</span> <span class='data-name'>" + task.assigned +
"</span> </div>");
});
}
</script>
<script src="data.jsonp"></script>
{"data":{"abc":[123]}}
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
<script type="text/javascript">
$(function() {
$.getJSON(document.location.protocol + "data.json")
.then(function(data, textStatus, jqxhr) {
var response = JSON.parse(data);
console.log(textStatus, response);
}
// `error` callback
, function(jqxhr, textStatus, errorThrown) {
var response = JSON.parse(jqxhr.responseText);
console.log(textStatus, errorThrown, response);
$("body").append(response.data.abc);
});
})
</script>
</head>
<body>
</body>
</html>
function showData(){
function getLocalPath(fileName/*file name assuming in same directory*/){
// Remove any location or query part of the URL
var directoryPath = window.location.href.split("#")[0].split("?")[0];
var localPath;
if (directoryPath.charAt(9) == ":") {
localPath = unescape(directoryPath.substr(8)).replace(new RegExp("/","g"),"\\");
}
localPath = localPath.substring(0, localPath.lastIndexOf("\\")+1)+fileName;
console.log(localPath);
return localPath;
}
var content = null;
try {
var fileSystemObj = new ActiveXObject("Scripting.FileSystemObject");
var file = fileSystemObj.OpenTextFile(getLocalPath("data.json"),1);
content = file.ReadAll();
file.Close();
} catch(ex) {
console.log(ex);
}
console.log(content);
}
showData();
http-server ./ -p 12345
/* secured json */
{
"one": "Singular sensation",
"two": "Beady little eyes",
"three": "Little birds pitch by my doorstep"
}
/* padded json aka jsonp */
Mycallback ({
"one": "Singular sensation",
"two": "Beady little eyes",
"three": "Little birds pitch by my doorstep"
});
var element = document.createElement("script");
element.src = "jsonp.js";
document.body.appendChild(element);
function Mycallback(jsondata) {
}
(function() { /* jsonp request note callback in url, otherwise same json*/
var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
$.getJSON( flickerAPI, {
tags: "mount rainier",
tagmode: "any",
format: "json"
})
.done(function( data ) {
$.each( data.items, function( i, item ) {
$( "<img>" ).attr( "src", item.media.m ).appendTo( "#images" );
if ( i === 3 ) {
return false;
}
});
});
})();