我想提供一个Javascript代码,它可以在任何包含它的网站上运行,但它总是需要在托管Javascript的服务器上获取更多数据(甚至修改数据).我知道出于明显的原因存在安全限制.
考虑在xyz.com上托管的index.html,其中包含以下内容:
<script type="text/javascript" src="http://abc.com/some.js"></script>
Run Code Online (Sandbox Code Playgroud)
some.js是否能够使用XMLHttpRequest将数据发布到abc.com?换句话说,abc.com是否被隐含信任,因为我们从那里加载了Javascript?
我有一个简单的谷歌Apps脚本是contentService的发射类似"世界,你好星期六2012年7月14日十四时17分21秒GMT + 1000(EST)"的网址是一个字符串https://script.google.com/macros/s/AKfycbxbFFG95mi8PWVNCE8366XaxnXQrt6p7p3OWbclXch_bbWczQ/exec,它对匿名开放.随意点击它.代码是:
function doGet() {
var output = ContentService.createTextOutput()
.setMimeType(ContentService.MimeType.TEXT)
.setContent("Hello world " + new Date());
Logger.log(output.getContent());
return output;
}
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中访问URL时,它会按预期返回字符串(pass.png).当我在XHR(ajax调用)中使用相同的URL时,它会因空错误而失败.在Chrome中的开发者工具中,重定向是"(已取消)"(fail.png).以下是重现失败的代码:
<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc() {
xhr=new XMLHttpRequest();
xhr.onreadystatechange=function() {
if (xhr.readyState==4 && xhr.status==200) {
document.getElementById("myDiv").innerHTML=xhr.responseText;
}
};
xhr.open("GET","https://script.google.com/macros/s/AKfycbxbFFG95mi8PWVNCE8366XaxnXQrt6p7p3OWbclXch_bbWczQ/exec",true);
xhr.send();
}
</script>
</head>
<body>
<h2>Using the XMLHttpRequest object</h2>
<div id="myDiv"></div>
<button type="button" onclick="loadXMLDoc()">Get Content via XHR</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
直接要求:
XHR请求:
我的问题(希望足够具体):如何从example.com上的普通旧网页进行XHR调用,从匿名Google Apps脚本ContentService脚本获取内容?
我正在使用XMLHttpRequest(使用jQuery)来获取多个文件的上传进度.通过向XMLHttpRequest对象添加"progress"事件侦听器,我可以得到event.loaded和event.total.这些变量给出了所有组合文件的加载和总字节数.
我想要做的是获取每个文件的进度,但从我可以看到的信息不能用于XMLHttpRequest.真的吗?
我不认为这甚至是必要的,但这是我的代码:
var xhr = $.ajaxSettings.xhr();
if (xhr.upload) {
xhr.upload.addEventListener('progress', function(event) {
var percent = 0;
var position = event.loaded || event.position;
var total = event.total;
if (event.lengthComputable) {
percent = Math.ceil(position / total * 100);
}
updateProgressBar(percent);
}, false);
}
return xhr;
Run Code Online (Sandbox Code Playgroud)
如果我能用XMLHttpRequest完成这个,那就太好了.任何关于此的信息将不胜感激.
我编写了一个使用$.postJQuery调用大量调用的Web应用程序.现在我想发送withCredentials: true它以保持会话活着,看起来像这样$.ajax(并且也像这样):
$.ajax({
type: 'post',
url: 'http://example.com/server/api.php',
crossDomain: true,
dataType: "json",
xhrFields: {
withCredentials: true
},
data: {
username : 'test',
password : 'test'
},
success: function (d) {
$('body').html(d.status);
}
});
Run Code Online (Sandbox Code Playgroud)
这是因为我现在想将PHP文件上传到我的服务器并使用Cordova导出客户端.(withCredentials: true仅包括在我的本地主机服务器上进行测试)我可以将其打包到$.post呼叫中还是需要更换所有呼叫?(我会写一个类似于$ .post的新函数)
如果尝试进行Ajax/XMLHttpRequest调用时发生某些网络类型错误,则XMLHttpRequest.status通常为"0".但肯定应该有一种方法可以告诉用户网络错误究竟是什么,例如DNS解析是否失败,或者连接是否被主动拒绝,甚至连接是否已经建立但是在发送任何有效的HTTP响应之前中止了?IE至少在JavaScript控制台中打印出一些额外的信息,例如
SCRIPT7002:XMLHttpRequest:网络错误0x2efd,由于错误00002efd无法完成操作.
但它不是很友好,我无法看到如何从javascript查询该信息转换成我可以向用户显示的内容.
我不介意是否必须以不同的方式为不同的浏览器实现,但我现在很难看到任何方式获取这些信息.
BTW至少我希望能够区分:
在任何情况下,返回有效的HTTP响应,但状态为200 OK,没关系 - 我可以得到一个明智的错误消息显示给用户.但对于其他任何事情,似乎没有办法区分各种可能的错误类型.在我的应用程序中,用户负责提供地址以发出Ajax请求,因此如果他们弄错了,我希望能够告诉他们请求失败的原因.
尝试使用预先签名的URL从React Native上传图像到没有运气.这是我的代码:
在节点中生成预先签名的URL:
const s3 = new aws.S3();
const s3Params = {
Bucket: bucket,
Key: fileName,
Expires: 60,
ContentType: 'image/jpeg',
ACL: 'public-read'
};
return s3.getSignedUrl('putObject', s3Params);
Run Code Online (Sandbox Code Playgroud)
这是对S3的RN请求:
var file = {
uri: game.pictureToSubmitUri,
type: 'image/jpeg',
name: 'image.jpg',
};
const xhr = new XMLHttpRequest();
var body = new FormData();
body.append('file', file);
xhr.open('PUT', signedRequest);
xhr.onreadystatechange = () => {
if(xhr.readyState === 4){
if(xhr.status === 200){
alert('Posted!');
}
else{
alert('Could not upload file.');
}
}
};
xhr.send(body);
Run Code Online (Sandbox Code Playgroud)
game.pictureToSubmitUri = assets-library://asset/asset.JPG?id=A282A2C5-31C8-489F-9652-7D3BD5A1FAA4&ext=JPG
signedRequest = https://my-bucket.s3-us-west-1.amazonaws.com/8bd2d4b9-3206-4bff-944d-e06f872d8be3?AWSAccessKeyId=AKIAIOLHQY4GAXN26FOQ&Content-Type=image%2Fjpeg&Expires=1465671117&Signature=bkQIp5lgzuYrt2vyl7rqpCXPcps%3D&x-amz-acl=public-read …
xmlhttprequest amazon-s3 amazon-web-services pre-signed-url react-native
我正在尝试使用Ajax下载文件并显示自定义下载进度条.
问题是我无法理解如何这样做.我编写了代码来记录进度,但不知道如何启动下载.
注意:文件类型不同.
提前致谢.
JS
// Downloading of files
filelist.on('click', '.download_link', function(e){
e.preventDefault();
var id = $(this).data('id');
$(this).parent().addClass("download_start");
$.ajax({
xhr: function () {
var xhr = new window.XMLHttpRequest();
// Handle Download Progress
xhr.addEventListener("progress", function (evt) {
if(evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
console.log(percentComplete);
}
}, false);
return xhr;
},
complete: function () {
console.log("Request finished");
}
})
});
Run Code Online (Sandbox Code Playgroud)
HTML和PHP
<li>
<div class="f_icon"><img src="' . $ico_path . '"></div>
<div class="left_wing">
<div class="progressbar"></div>
<a class="download_link" href="#" id="'.$file_id.'"><div class="f_name">' …Run Code Online (Sandbox Code Playgroud) 所以我正在考虑用户粘贴链接的功能,服务器端代码抓取提供的链接并响应该链接的内容(例如页面标题,描述,缩略图等).
用户可以同时更改链接,并且在这样做时,ajax-request应该在客户端中止.
我想知道IIS服务器到底发生了什么,特别是我的C#代码.
$.ajax({
url: "http://10.13.22.150/req_path",
success: function(result){
console.log(result);
}
});
Run Code Online (Sandbox Code Playgroud)
我想将跨域XMLHttpRequest发送到专用网络中的IP地址.但是,开发人员工具控制台中显示以下错误:
SCRIPT7002:XMLHttpRequest:网络错误0x2efd,由于错误00002efd无法完成操作.
根据Wireshark的说法,数据包不是从客户端发送的.我猜这个请求被Microsoft Edge阻止了.此外,我发现只有当XMLHttpRequest和Edge客户端的URL在私有网络的同一个CIDR中时才会阻止请求.
Client IP Request URL Result
192.168.x.x send to 192.168.x.x ->>>>> X
10.13.x.x send to 10.13.x.x ->>>>> X
10.13.x.x send to 192.168.x.x ->>>>> O
Run Code Online (Sandbox Code Playgroud)
其他浏览器如IE11/Chrome/Firefox也可以.此情况仅在Microsoft Edge中显示.有关此问题的解决方法或解决方案吗?
我有一个实现XMLHttpRequest接口的类.根据传递给的URL open(),我可以确定是使用默认的XMLHttpRequest还是我的自定义实现.我的想法是使用代理来执行此操作:
let xhr = new XHRProxy();
xhr.open('GET', 'http://blah'); // Decide here depending on URL
Run Code Online (Sandbox Code Playgroud)
我使用ES6代理进行了一些测试,看起来很有希望,但不幸的是,构建代理后无法修改代理目标:
var foo = {
name() {
return "foo";
}
};
var bar = {
name() {
return "bar";
}
}
var handler = {
get(target, property, receiver) {
if (property === "switchToBar") {
// FIXME: This doesn't work because a Proxy's target is not exposed AFAIK
receiver.target = bar;
return function() {};
} else {
return target[property];
}
}
}
var proxy = …Run Code Online (Sandbox Code Playgroud) xmlhttprequest ×10
ajax ×7
javascript ×6
jquery ×3
cors ×2
amazon-s3 ×1
c# ×1
ecmascript-6 ×1
iis ×1
post ×1
react-native ×1
xss ×1