有没有办法将XMLHttpRequest与其他域结合使用?
我想从Google解析一些xml,而不必使用服务器,因此运行起来极其复杂.
var req = getXmlHttpRequestObject();
...
req.open('GET', 'http://www.google.de/ig/api?weather=Braunschweig', true);
req.setRequestHeader("Content-Type","text/xml");
req.onreadystatechange = setMessage;
req.send(null);
Run Code Online (Sandbox Code Playgroud)
在服务器端这样做是不可能的,至少我不必问
我正在开发一个简单的辅助类来使用XmlHttpRequest发送请求(下面的代码).但我不能让它发挥作用.例如,在谷歌INVALID_STATE_ERR: DOM Exception 11浏览器中,我收到错误,而在其他浏览器中,我得到状态== 0.
//@method XRequest: Object constructor. As this implements a singleton, the object can't be created calling the constructor, GetInstance should be called instead
function XRequest() {
this.XHR = XRequest.CreateXHR();
}
XRequest.instance = null;
//@method static GetInstance: Creates a singleton object of type XRequest. Should be called whenever an object of that type is required.
//@return: an instance of a XRequest object
XRequest.GetInstance = function() {
if(XRequest.instance == null) {
XRequest.instance = new XRequest();
} …Run Code Online (Sandbox Code Playgroud) 我有一个表格,我通过ajax提交.我正在使用jquery表单插件.我想要做的是获取从我的服务器返回的'Location'标题.我可以在萤火虫中看到它.但是每当我在成功回调中调用getResponseHeader()函数时,它总是返回'undefined'.
码:
form.ajaxForm({
dataType: 'xml',
data: {format: 'xml'},
resetForm: true,
success: function(xml,status,xhr){
var location = xhr.getResponseHeader('Location');
alert(location);
});
Run Code Online (Sandbox Code Playgroud)
位置未定义.但我可以在萤火虫中看到"位置"标题.我错过了什么?即使我从xhr对象调用getAllResponseHeaders(),它也会返回'undefined'
我怎样才能覆盖该XMLHttpRequest.open()方法然后捕获并更改它的参数?
我已经尝试过代理方法,但它没有用,虽然XMLHttpRequest()在调用时删除了open over-rid :
(function() {
var proxied = window.XMLHttpRequest.open;
window.XMLHttpRequest.open = function() {
$('.log').html(arguments[0]);
return proxied.apply(this, arguments);
};
})();
Run Code Online (Sandbox Code Playgroud) 对于一个项目,我正在查看各种HTML5和Javascript元素以及它们周围的安全性,我正试图让我的头脑刚刚绕过CORS.
根据我的测试,如果我删除..
<?php
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
?>
Run Code Online (Sandbox Code Playgroud)
..从试图访问的页面我在Chrome上的控制台日志中看到以下内容:
XMLHttpRequest cannot load http://www.bla.com/index.php. Origin http://bla2.com is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
我理解这是正确的,但Wireshark在返回时显示HTTP/1.1 200 OK,数据显示所请求页面的来源.那么只是浏览器和Javascript阻止responseText以任何实质性方式使用,即使它实际上被转移了吗?
代码如下:
function makeXMLRequest() {
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4) {
alert(xmlhttp.responseText);
}
}
xmlhttp.open("GET","http://www.bla.com/index.php",true);
xmlhttp.send();
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
XMLHttpRequest无法加载https://webservice.com?param=hahah.Access-Control-Allow-Origin不允许来源http:// {domain}.
当我尝试通过wampserver进行web服务调用时,我得到了这个,我怎么能在wampserver上启用它?
或者我怎么可能只是jsonP获取xml数据而没有javascript抛出错误.
在Chrome的JavaScript控制台中,如果我运行它:
var that = new XMLHttpRequest();
that.open('GET', 'http://this_is_a_bad_url.com', false);
that.send();
Run Code Online (Sandbox Code Playgroud)
我得到了一个故意预期的错误:
NetworkError: A network error occurred.
Run Code Online (Sandbox Code Playgroud)
我想抓住这个,所以我使用:
var that = new XMLHttpRequest();
that.open('GET', 'http://this_is_a_bad_url.com', false);
try {
that.send();
} catch(exception) {
if(exception instanceof NetworkError) {
console.log('There was a network error.');
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个关于未定义NetworkError的错误:
ReferenceError: NetworkError is not defined
Run Code Online (Sandbox Code Playgroud)
我怎样才能捕获NetworkError?
在纯Javascript中是否有任何AJAX Post的实现(可能使用xmlhttprequest)?
例如,如果我有这样的表单:
<form action="request.php" id="register_form">
<input type="text" name="first_name" placeholder="First Name">
<input type="text" name="last_name" placeholder="LastName">
<input type="submit" value="submit_now">
</form>
Run Code Online (Sandbox Code Playgroud)
这是我在jQuery中实现的AJAX
$('#register_form').submit(function(e) {
var postData = $(this).serializeArray();
var formURL = $(this).attr("action");
/* start ajax submission process */
$.ajax({
url: formURL,
type: "POST",
data: postData,
success: function(data, textStatus, jqXHR) {
alert('Success!');
},
error: function(jqXHR, textStatus, errorThrown) {
alert('Error occurred!');
}
});
e.preventDefault(); //STOP default action
/* ends ajax submission process */
});
Run Code Online (Sandbox Code Playgroud)
我可以不使用jQuery 做同样的事情吗?如果可能,我如何将上述jQuery代码实现为纯/纯Javascript代码?
我在https://www.youtube.com/watch?v=zlERo_JMGCw 29:38 观看Matthew Podwysocki活动
在那里他解释了他们如何在netflix上解决滚动.用户滚动以获取更多数据,因为先前的数据被清理并且更多(但滚动回来再次显示以前的数据).
我想做类似的,但我抓住了netflix演示代码:
function getRowUpdates(row) {
var scrolls = Rx.Observable.fromEvent(document, 'scroll');
var rowVisibilities =
scrolls.throttle(50)
.map(function(scrollEvent) {
return row.isVisible(scrollEvent.offset);
})
.distinctUntilChanged();
var rowShows = rowrowVisibilities.filter(function(v) {
return v;
});
var rowHides = rowrowVisibilities.filter(function(v) {
return !v;
});
return rowShows
.flatMap(Rx.Observable.interval(10))
.flatMap(function() {
return row.getRowData().takeUntil(rowHides);
})
.toArray();
}
Run Code Online (Sandbox Code Playgroud)
但是我对如何根据这里的滚动传递新数据或页面数据感到困惑.有人可以解释我如何能够做到以下几点:
我想使用Service Workers来增强现有的网站.特别是,我想通过让Service Workers在实际资源不可用时使用占位符资源响应请求来添加更好的离线支持.这种方法一直有效,但我遇到了一个障碍.站点中有一些地方使用同步 XHR请求来加载某些资源,而我的服务工作者在Chrome中没有收到它们的事件.(请不要建议消除同步XHR请求.这是期望的,但超出范围.)
是否应该让服务工作者能够响应同步XHR请求?我可以想象这实现起来很复杂,并且会理解它是否不受支持.W3C服务工作者规范(工作草案)和WHATWG获取规范(生活标准)之间应该存在"正确"的答案,但我还没有完成对它们的解密.我希望解释规范如何描述是否应该支持这一点,和/或对有关指定或实现此行为的讨论的任何引用.
xmlhttprequest ×10
javascript ×8
ajax ×5
cors ×2
jquery ×2
fetch-api ×1
html5 ×1
overriding ×1
rxjs ×1
rxjs5 ×1
scroll ×1
wamp ×1
wampserver ×1
xml ×1