有一个页面(url),我通过XMLHttpRequest请求它,但是我没有得到请求的URL的响应,它正在将请求发送到另一个页面,
请求---> page.php
从> directedpage.php获取响应
问题是如何获得响应网址?(示例中为directedpage.php)
澄清一点:我没有任何问题在我的jQuery ajax调用中添加自定义标头,我希望自动将我的自定义标头添加到所有ajax调用中.
如果你看一下jquery $ .ajax自定义http头问题(不是我的问题),你会看到一个非常好的例子,说明如果手动为每个ajax调用实现代码的工作方式.
我想覆盖所有jQuery ajax调用的beforeSend.据jQuery的文档,我可以利用这样做jQuery.ajaxSetup() ,但有一个警告,说你可能不应该,可能会导致意外的行为,所有的东西.对于这种全局回调,他们建议使用.ajaxStart(). .ajaxStart()看起来很棒,除了它不公开XHR所以我可以添加标题.
我应该使用ajaxSetup添加beforeSend吗?有没有办法从ajaxStart访问XHR?其他选择?
我们网站的用户运行我们的Chrome插件,其中包括Chrome扩展程序开发页面中所述的XMLHttpRequest执行跨源请求.这已经运行了好几年了.但是,自从我们的用户升级到最新版本的Chrome(v38)后,这些请求都失败了.我们的网站使用HTTPS运行,并且通过我们的内容脚本加载的一些网址在HTTP上.消息是:
[已屏蔽]" https://www.ourpage.com/ "上的页面是通过HTTPS加载的,但是运行了来自" http://www.externalpage.com "的不安全内容:此内容也应通过HTTPS加载.
发生错误的报告行位于我发出HTTP调用的内容脚本中:
xhr.send(null);
Run Code Online (Sandbox Code Playgroud)
我无法控制外部页面,我宁愿不从我们自己的页面中删除SSL.问题:这是一个错误还是有一个我不知道的解决方法?
(注意:清单中的权限始终设置为<all_urls>已经工作了很长时间.将其设置为http://*/并https://*/没有帮助.)
google-chrome xmlhttprequest cross-domain google-chrome-extension
对于我们的一个ajax请求(带有.json响应),我们的一些客户抱怨他们看到"文件下载"提示要求用户下载.json响应.我感到困惑,因为考虑到这是一个xhr响应,这应该永远不会发生.有没有人见过这个?
谢谢
题:
我正在尝试使用JSON跨域,但我找到的只是JSON解析器,我不需要...
我已经读过可以使用JSON进行跨域请求,但到目前为止,我只看到了是使用XMLHttpRequest的实现...
- 这意味着你不能使用跨域请求,至少不是在IE 8之外...
我一直在http://www.json.org/,但我发现是解析器还是无用的.
到目前为止,我发现谷歌最好的是
http://devpro.it/JSON/files/JSONRequest-js.html,
但这相当混乱,不能跨域工作,域内也不行 - 或者更确切地说一点也不...
var the_object = {};
var http_request = new XMLHttpRequest();
http_request.open( "GET", url, true );
http_request.onreadystatechange = function () {
if ( http_request.readyState == 4 && http_request.status == 200 ) {
the_object = JSON.parse( http_request.responseText );
}
};
http_request.send(null);
Run Code Online (Sandbox Code Playgroud) 我有这个代码:
window.onload = function() {
document.cookie = 'foo=bar; expires=Sun, 01 Jan 2012 00:00:00 +0100; path=/';
var xhr = new XMLHttpRequest();
xhr.open("GET", "/showcookie.php",true);
xhr.setRequestHeader("Cookie", "foo=quux");
xhr.setRequestHeader("Foo", "Bar");
xhr.setRequestHeader("Foo", "Baz");
xhr.withCredentials = true;
var pre = document.getElementById('output');
xhr.onreadystatechange = function() {
if (4 == xhr.readyState) {
pre.innerHTML += xhr.responseText + "\n";
}
};
xhr.send(null);
};
Run Code Online (Sandbox Code Playgroud)
这个/showcookie.php
<?php
print_r($_COOKIE);
?>
Run Code Online (Sandbox Code Playgroud)
它总是显示出来
Array
(
[Host] => localhost
[User-Agent] =>
[Accept] =>
[Accept-Language] => pl,en-us;q=0.7,en;q=0.3
[Accept-Encoding] => gzip,deflate
[Accept-Charset] => ISO-8859-2,utf-8;q=0.7,*;q=0.7
[Keep-Alive] => 115
[Connection] …Run Code Online (Sandbox Code Playgroud) 当对xhr请求的响应是301时,有没有办法获取最终重定向到的URL?
我的网站包含来自旧版本的大量遗留网址,这些网址会返回301对正确新网址的回复.
出于实用目的,我希望能够向旧URL发出请求,并能够检索新的URL,即发送请求到"/oldpage.aspx?foo=someParam",获取新的URL"/ arbitaryNewPageName/someParam".
我在firebug控制台中一直在玩这个:
$.ajax({
url: "/oldpage.aspx?foo=someParam",
success: function(response, status, jqxhr){
//poking around, trying to get the new URL, "/arbitraryNewPage/someParam"
console.log(jqxhr.getAllResponseHeaders());
console.log(jqxhr);
},
beforeSend: function(jqxhr, settings){
console.log(jqxhr);
console.log(settings);
}
});
Run Code Online (Sandbox Code Playgroud)
我可以在firebug中看到,当这段代码运行时,它会对"/oldpage.aspx?foo=someParam"执行一次GET,并获得301响应,然后获得另一个GET到"/ arbitaryNewPageName/someParam".
对于第一个请求,我在响应标头的Location值中看到重定向的URL.不幸的是,第二个请求是传递给$ .ajax.success函数的内容,它只在请求头的Referrer值中有重定向的URL.
是否有可能拦截对第一个响应的响应,或者可能会看到第二个请求的请求标头?
编辑:感谢大家的回复.我想我需要提供一些背景来澄清我到底在寻找什么.
业务用户要求我创建一个将旧URL与新URL相关联的列表.由于我已经实现了将旧URL重定向到服务器上的新URL的方法,因此我希望能够减少这项工作,并创建一个脚本,将请求放置到旧URL并获取请求被重定向到的URL.像这样的东西:
for (var i = 0; i < arrayOfLegacyUrls.length; i++)
{
$.ajax({
url: arrayOfLegacyUrls[i],
success: function(response, status, jqxhr){
var newUrl = "???"; //do magic to get URL that request was redirected to
writeToFileForBusinessUser(arrayOfLegacyUrls[i], newUrl);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我的问题的关键在于:我可以从XHR获取我的请求被重定向到的URL吗?到目前为止,答案似乎是"不".
我想我误解了用xmlhttprequest管理cookies.我有一个响应的服务器XMLHttpRequest在JavaScript做,我的服务器返回Allow-Control-Access-Origin,Access-Control-Allow-Headers,Access-Control-Expose-Headers并Access-Control-Allow-Credentials用正确的值标题.
我正在使用javascript在服务器上进行摘要身份验证,没有问题,我收到WWW-Authenticate来自服务器的标题,我处理并向服务器发送带有所有摘要响应的授权标头,一切正常.问题是,当摘要挑战成功时,我的服务器返回一个Set-Cookie标头,我必须得到它并添加到我的所有xhr请求的其余部分.浏览器(使用Chromium和Chrome)不允许我访问标题:
xhr.getResponseHeader("Set-Cookie");
Run Code Online (Sandbox Code Playgroud)
好吧,在XMLHTTPREQUEST Level 2中它说:"返回响应中的所有头文件,除了那些字段名称为Set-Cookie或Set-Cookie2的头文件"好的,所以我不能接受它,但有什么办法?使用Chrome Api进行Cookie(目前我还没有注意到它的注意事项),但我希望以标准的方式做到可行.随着:
xhr.withCredentials = true;
Run Code Online (Sandbox Code Playgroud)
意味着浏览器自动获取set-cookie并发送cookie头?
我正在尝试使用XMLHttpRequest和file.slice将一些大文件上传到服务器.
我已经在文档和其他各种链接的帮助下做到了这一点.
由于上传大文件是一项很长的工作,我想为用户提供一个进度条.
经过一些更多的阅读后,我遇到了一个例子,从理论上讲,它完全符合我的需要.
通过获取示例代码并使其适应我的需求,我达成了
var upload =
{
blobs: [],
pageName: '',
bytesPerChunk: 20 * 1024 * 1024,
currentChunk: 0,
loaded: 0,
total: 0,
file: null,
fileName: "",
uploadChunk: function (blob, fileName, fileType) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.responseText) {
// alert(xhr.responseText);
}
}
};
xhr.addEventListener("load", function (evt) {
$("#dvProgressPrcent").html("100%");
$get('dvProgress').style.width = '100%';
}, false);
xhr.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
var progress = …Run Code Online (Sandbox Code Playgroud) 以下跨源POST请求,其内容类型为multipart/form-data且只有简单的标题是预检的.根据W3C规范,除非我读错了,否则不应该预先检查.我已经证实这种情况发生在Chrome 27和Firefox 10.8.3中.我没有测试任何其他浏览器.
以下是请求标头等:
Request URL:http://192.168.130.135:8081/upload/receiver
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:27129
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryix5VzTyVtCMwcNv6
Host:192.168.130.135:8081
Origin:http://192.168.130.135:8080
Referer:http://192.168.130.135:8080/test/raytest-jquery.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.37 Safari/537.36
Run Code Online (Sandbox Code Playgroud)
这是OPTIONS(预检)请求:
Request URL:http://192.168.130.135:8081/upload/receiver
Request Method:OPTIONS
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:192.168.130.135:8081
Origin:http://192.168.130.135:8080
Referer:http://192.168.130.135:8080/test/raytest-jquery.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.37 Safari/537.36
Run Code Online (Sandbox Code Playgroud)
规范似乎很清楚:
更新:这是一些简单的客户端代码,它将重现这一点: …
multipartform-data xmlhttprequest cors xmlhttprequest-level2
xmlhttprequest ×10
javascript ×6
jquery ×3
ajax ×2
cookies ×2
cors ×2
json ×2
cross-domain ×1
download ×1
file-upload ×1
http-headers ×1
jqxhr ×1
prompt ×1
response ×1
setcookie ×1