标签: xmlhttprequest

跨站点XMLHttpRequest

我想提供一个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?

javascript xss ajax xmlhttprequest

12
推荐指数
1
解决办法
4万
查看次数

如何针对Google Apps Script ContentService生成XHR/ajax请求?

我有一个简单的谷歌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)

直接要求: DIrect requestpass.png XHR请求: 在此输入图像描述 我的问题(希望足够具体):如何从example.com上的普通旧网页进行XHR调用,从匿名Google Apps脚本ContentService脚本获取内容?

ajax xmlhttprequest cors google-apps-script

12
推荐指数
1
解决办法
6164
查看次数

使用XMLHttpRequest获取单个文件的上载进度

我正在使用XMLHttpRequest(使用jQuery)来获取多个文件的上传进度.通过向XMLHttpRequest对象添加"progress"事件侦听器,我可以得到event.loadedevent.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完成这个,那就太好了.任何关于此的信息将不胜感激.

javascript jquery xmlhttprequest

12
推荐指数
1
解决办法
5179
查看次数

JQuery $ .post跨域和凭据

我编写了一个使用$.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 jquery post xmlhttprequest

12
推荐指数
1
解决办法
3万
查看次数

使用XMLHttpRequest时如何向用户显示实际网络错误?

如果尝试进行Ajax/XMLHttpRequest调用时发生某些网络类型错误,则XMLHttpRequest.status通常为"0".但肯定应该有一种方法可以告诉用户网络错误究竟是什么,例如DNS解析是否失败,或者连接是否被主动拒绝,甚至连接是否已经建立但是在发送任何有效的HTTP响应之前中止了?IE至少在JavaScript控制台中打印出一些额外的信息,例如

SCRIPT7002:XMLHttpRequest:网络错误0x2efd,由于错误00002efd无法完成操作.

但它不是很友好,我无法看到如何从javascript查询该信息转换成我可以向用户显示的内容.

我不介意是否必须以不同的方式为不同的浏览器实现,但我现在很难看到任何方式获取这些信息.

BTW至少我希望能够区分:

  • a)没有互联网连接(例如wifi断开连接)
  • b)DNS失败(无法解析名称)
  • c)无法与服务器建立TCP连接(主动拒绝或超时)
  • d)无效响应(不是HTTP响应)
  • e)SSL证书失败

在任何情况下,返回有效的HTTP响应,但状态为200 OK,没关系 - 我可以得到一个明智的错误消息显示给用户.但对于其他任何事情,似乎没有办法区分各种可能的错误类型.在我的应用程序中,用户负责提供地址以发出Ajax请求,因此如果他们弄错了,我希望能够告诉他们请求失败的原因.

javascript ajax xmlhttprequest

12
推荐指数
1
解决办法
1032
查看次数

使用预先签名的URL将本机上传到S3

尝试使用预先签名的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

12
推荐指数
3
解决办法
6002
查看次数

显示使用XHR2/AJAX下载文件的进度条

我正在尝试使用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)

javascript ajax jquery xmlhttprequest

12
推荐指数
1
解决办法
2万
查看次数

当请求中止时,IIS/C#中会发生什么

所以我正在考虑用户粘贴链接的功能,服务器端代码抓取提供的链接并响应该链接的内容(例如页面标题,描述,缩略图等).

用户可以同时更改链接,并且在这样做时,ajax-request应该在客户端中止.

我想知道IIS服务器到底发生了什么,特别是我的C#代码.

  • 响应线程是否终止?
  • Response对象现在是否返回null,或者Response.Write是否抛出异常?
  • 响应线程中抛出异常只是在哪里?(那个甚至没有意义,但无论如何)

c# iis ajax xmlhttprequest

11
推荐指数
1
解决办法
2707
查看次数

Microsoft Edge阻止了发送到同一专用网络CIDR中的IP的跨域请求

$.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中显示.有关此问题的解决方法或解决方案吗?

javascript ajax xmlhttprequest cors microsoft-edge

11
推荐指数
1
解决办法
2万
查看次数

是否可以更改代理的目标?

我有一个实现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)

javascript xmlhttprequest ecmascript-6

11
推荐指数
3
解决办法
2054
查看次数