How to make an AJAX call without jQuery?
如何在不使用jquery的情况下使用javascript进行Ajax调用?
- 请注意,虽然这里的许多答案都建议您监听readystatechange,但现代浏览器现在支持xmlhttprequest的加载、中止、进度和错误事件(您可能只关心加载)。
- @例如,当它的主要功能(DOM遍历)不需要时。
- @imad是因为jquery是一个javascript库,当人们决定你必须使用一种完全非强制性的语言,而这种语言实际上并没有添加任何新的东西时,这真的很烦人。
- 事实上,有人甚至质疑不使用jquery的决定,或者某个问题必须说明他们不想使用所说的库,这是令人沮丧的。
- 您可能不需要jquery.com很多纯JS示例,包括用于IE8+、IE9+和IE10的Ajax。+
- w3schools在不使用jquery的情况下逐步引入ajax:w3schools.com/js/js_Ajax_intro.asp
一个JavaScript:"香草"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <script type="text/javascript"> function loadXMLDoc() { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == XMLHttpRequest.DONE) { // XMLHttpRequest.DONE == 4 if (xmlhttp.status == 200) { document.getElementById("myDiv").innerHTML = xmlhttp.responseText; } else if (xmlhttp.status == 400) { alert('There was an error 400'); } else { alert('something else other than 200 was returned'); } } }; xmlhttp.open("GET","ajax_info.txt", true); xmlhttp.send(); } |
一个jQuery的:
1 2 3 4 5 6 7 | $.ajax({ url:"test.html", context: document.body, success: function(){ $(this).addClass("done"); } }); |
- 请停止支持IE5/IE6
- @Drewnoakes:它确实更可读,但不幸的是,当我在Opera Mini浏览器上尝试它时,它不受支持,所以我猜它的支持不那么广泛。
- @fractaliste如果只是在与xmlhttp.status相关的if块之后调用回调,那么只需在那里调用回调,就可以完成了。
- @我认为Gokigoooks是说,当他用"普通"的javascript阅读时,他认为这是他需要下载的一个javascript库。他可能也在引用普通JS。
- @阿奇博尔德,你不使用IE5作为你的主浏览器吗?
- @永远的JakeSylvestre网景
- 实际上,我定制了自己的浏览器,所以它不支持更新的功能。它使用regex解析所有HTML
使用下面的代码,你可以做类似的东西很容易,像这样:
1 | ajax.get('/test.php', {foo: 'bar'}, function() {}); |
这里是代码段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | var ajax = {}; ajax.x = function () { if (typeof XMLHttpRequest !== 'undefined') { return new XMLHttpRequest(); } var versions = [ "MSXML2.XmlHttp.6.0", "MSXML2.XmlHttp.5.0", "MSXML2.XmlHttp.4.0", "MSXML2.XmlHttp.3.0", "MSXML2.XmlHttp.2.0", "Microsoft.XmlHttp" ]; var xhr; for (var i = 0; i < versions.length; i++) { try { xhr = new ActiveXObject(versions[i]); break; } catch (e) { } } return xhr; }; ajax.send = function (url, callback, method, data, async) { if (async === undefined) { async = true; } var x = ajax.x(); x.open(method, url, async); x.onreadystatechange = function () { if (x.readyState == 4) { callback(x.responseText) } }; if (method == 'POST') { x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); } x.send(data) }; ajax.get = function (url, data, callback, async) { var query = []; for (var key in data) { query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key])); } ajax.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, async) }; ajax.post = function (url, data, callback, async) { var query = []; for (var key in data) { query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key])); } ajax.send(url, callback, 'POST', query.join('&'), async) }; |
- 这是一个非常好的快速启动,但我认为您在@3nigma的答案中缺少了一些功能。也就是说,我不确定在不返回服务器响应的情况下发出某些请求(全部是GET和一些POST)有多大意义。我在send方法的末尾添加了另一行--
return x.responseText; ,然后返回每个ajax.send 调用。 - @Sam You[通常]不能作为异步请求返回。您应该在回调中处理响应。
- @萨姆有一个例子:
ajax.get('/test.php', {foo: 'bar'}, function(responseText) { alert(responseText); }); 。 - 尼斯片段。但是,不是应该是
query.join('&').replace(/%20/g, '+') 吗? - @afsantostackoverflow.com/questions/1634271/&hellip;
- @佩塔-我认为你的API有问题。首先,由于open方法的签名(w3.org/tr/xmlhttprequest/-open()-方法),open方法中名为sync的参数可以称为async。第二个问题。如果Ajax调用是同步的,那么回调的意义是什么?
- 你好,回答得很好。
x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 的目的是什么?除了ActiveX之外,这里似乎只有伏都教的一行(我猜是针对旧版本的InternetVischerator?) - @Jonnyleeds见stackoverflow.com/a/4073451/268074
- 太好了,谢谢。我刚学了些新东西
- @shark它不是同步的,除非显式地使其同步。
- 别再支持IE 6了,没人会用它的。
- 我不是什么专家,所以不知道为什么在主线程上chrome抛出错误"synchronous xmlhttprequest由于其对最终用户体验的不利影响而被弃用。如需更多帮助,请查看xhr.spec.whatwg.org."行x.open(method,url,sync);
- @用户1517108我在Chrome中看到了同样的问题,并用一个修复程序更新了代码:一个省略的
async 参数(就像在代码示例中一样)现在将异步执行。 - 请包含CORS请求,也可以将此行作为选项。xhr.withcredentials=true;'
你可以使用以下功能:
1 2 3 4 5 6 7 8 9 10 11 12 | function callAjax(url, callback){ var xmlhttp; // compatible with IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ callback(xmlhttp.responseText); } } xmlhttp.open("GET", url, true); xmlhttp.send(); } |
相似的解决方案,你可以尝试在本文链接:在线
- http:/ / / / tryit.asp www.w3schools.com XML?第一tryajax _ filename=
- http:/ / / / tryit.asp www.w3schools.com XML?文件名= tryajax _回调
- 还可以为请求添加一些输入变量(将在xmlhttp.send(request);中使用)。
- @pavelperna,因为这里的例子是一个
GET ,所以您可以将它们添加到请求中,但更一般地说,我和您在一起,我真的考虑更新响应以接受请求参数作为这里函数的参数,以及传递方法(GET 或POST ),但是阻止我的是我要保持他在这里回答得尽可能简单,让人们尽可能快地尝试。事实上,我讨厌其他的答案,因为它们试图完美。
我知道这是一个相当大的问题,但现在有一个更好的在新的浏览器natively API可用。你让
1 2 3 4 5 6 7 8 9 10 | var opts = { method: 'GET', headers: {} }; fetch('/get-data', opts).then(function (response) { return response.json(); }) .then(function (body) { //doSomething with body; }); |
更多的细节在这里。
- 你知道你的浏览器是坏的(即当你不得不重命名它让人们重新开始使用它时)(边缘)
- 不要在手机上使用fetch。它在Android上有HTTP头下套管问题。在iOS上运行良好。
- 它也不适用于最流行的Safari版本
- 实际上,声称fetch API在"较新的浏览器"中工作是不正确的,因为ie和edge不支持它。(边缘14要求用户专门启用此功能)caniuse.com/feat=fetch
- 这里应该提到Github的polyfill。github.com/github/fetch(获取)
- 只需添加
如何在本版es6 / es2015平原?
1
2
3
4
5
6
7
8
9function get(url) {
return new Promise((resolve, reject) => {
const req = new XMLHttpRequest();
req.open('GET', url);
req.onload = () => req.status === 200 ? resolve(req.response) : reject(Error(req.statusText));
req.onerror = (e) => reject(Error(`Network Error: ${e}`));
req.send();
});
}该函数返回a的承诺。这里是一个例子如何使用函数和它的承诺:返回的句柄
1
2
3
4
5
6
7get('foo.txt')
.then((data) => {
// Do stuff with data, if foo.txt was successfully loaded.
})
.catch((err) => {
// Do stuff on error...
});如果你需要,你可以使用负载的JSON文件的数据转换
JSON.parse() JS对象加载到参与。所以,你可以把
req.responseType='json' 整合功能,但不幸的,没有IE的支持它,这样我会有JSON.parse() 棒。- 使用
XMLHttpRequest 可以异步尝试加载文件。这意味着您的代码将继续执行,而您的文件将在后台加载。为了在脚本中使用文件的内容,需要一种机制来告诉脚本文件何时完成加载或加载失败。这就是承诺的用武之地。有其他方法可以解决这个问题,但我认为承诺是最方便的。 - @Rotareti移动浏览器支持这种方法吗?
- 只有更新的浏览器版本支持它。通常的做法是用最新的ES6/7/编写代码。并使用babel或类似工具将其发回ES5以获得更好的浏览器支持。
- @Rotareti你能解释一下为什么这比简单的回调更方便吗?为了旧的浏览器支持,这一便利值得付出额外的努力吗?
- @Lennartkloppenburg我认为这个答案很好地解释了这一点:stackoverflow.com/a/14244950/1612318"为了旧的浏览器支持,这个便利值得付出额外的努力吗?"承诺只是ES6/7附带的众多功能之一。如果使用蒸腾器,则可以编写最新的JS。这是值得的!
1
2
3
4
5var xhReq = new XMLHttpRequest();
xhReq.open("GET","sumGet.phtml?figure1=5&figure2=10", false);
xhReq.send(null);
var serverResponse = xhReq.responseText;
alert(serverResponse); // Shows"15"http:///_ ajaxpatterns.org XMLHttpRequest呼叫
- 这能跨浏览器工作吗?
- 不要进行同步调用。使用xhreq.onload并使用回调。
- @你能举个例子说明你的意思吗?
- @fellowtranger oreq.onload=函数()/*this.responsetext*/
- @Kenansulayman同步调用有什么问题?有时它最适合。
- @安德烈:没什么,只要你意识到你正在停止执行所有的操作,直到服务器的响应返回。没有什么特别糟糕的,但可能不完全适合某些用途。
- @3nigma不在IE 10上工作
使用XMLHttpRequest。
简单的GET请求
1
2
3httpRequest = new XMLHttpRequest()
httpRequest.open('GET', 'http://www.example.org/some.file')
httpRequest.send()简单的邮件请求
1
2
3httpRequest = new XMLHttpRequest()
httpRequest.open('POST', 'http://www.example.org/some/endpoint')
httpRequest.send('some data')我们可以指定请求应该是TRUE(默认),异步或同步(假),一个可选的第三参数。
1
2// Make a synchronous GET request
httpRequest.open('GET', 'http://www.example.org/some.file', false)我们可以在电话
httpRequest.send() 头集1httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');我们可以通过设置在响应处理函数之前调用
httpRequest.send() httpRequest.onreadystatechange to a1
2
3
4
5
6
7
8
9
10httpRequest.onreadystatechange = function(){
// Process the server response here.
if (httpRequest.readyState === XMLHttpRequest.DONE) {
if (httpRequest.status === 200) {
alert(httpRequest.responseText);
} else {
alert('There was a problem with the request.');
}
}
}你可以得到一个正确的对象根据浏览器
1
2
3
4
5
6
7
8
9
10
11
12
13
14function getXmlDoc() {
var xmlDoc;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlDoc = new XMLHttpRequest();
}
else {
// code for IE6, IE5
xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlDoc;
}一个正确的对象,可能abstracted GET可以:
1
2
3
4
5
6
7
8
9
10
11
12
13function myGet(url, callback) {
var xmlDoc = getXmlDoc();
xmlDoc.open('GET', url, true);
xmlDoc.onreadystatechange = function() {
if (xmlDoc.readyState === 4 && xmlDoc.status === 200) {
callback(xmlDoc);
}
}
xmlDoc.send();
}和一个后:
1
2
3
4
5
6
7
8
9
10
11
12
13
14function myPost(url, data, callback) {
var xmlDoc = getXmlDoc();
xmlDoc.open('POST', url, true);
xmlDoc.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlDoc.onreadystatechange = function() {
if (xmlDoc.readyState === 4 && xmlDoc.status === 200) {
callback(xmlDoc);
}
}
xmlDoc.send(data);
}一个小的组合的几个例子,从以下的一本简单的创建:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40function ajax(url, method, data, async)
{
method = typeof method !== 'undefined' ? method : 'GET';
async = typeof async !== 'undefined' ? async : false;
if (window.XMLHttpRequest)
{
var xhReq = new XMLHttpRequest();
}
else
{
var xhReq = new ActiveXObject("Microsoft.XMLHTTP");
}
if (method == 'POST')
{
xhReq.open(method, url, async);
xhReq.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhReq.setRequestHeader("X-Requested-With","XMLHttpRequest");
xhReq.send(data);
}
else
{
if(typeof data !== 'undefined' && data !== null)
{
url = url+'?'+data;
}
xhReq.open(method, url, async);
xhReq.setRequestHeader("X-Requested-With","XMLHttpRequest");
xhReq.send(null);
}
//var serverResponse = xhReq.responseText;
//alert(serverResponse);
}
// Example usage below (using a string query):
ajax('http://www.google.com');
ajax('http://www.google.com', 'POST', 'q=test');或如果你的参数是对象(S)/调整额外的代码:
1
2
3
4
5
6
7
8
9
10
11var parameters = {
q: 'test'
}
var query = [];
for (var key in parameters)
{
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(parameters[key]));
}
ajax('http://www.google.com', 'POST', query.join('&'));两个版本的浏览器+应完全兼容。
- 在for循环中使用hasownpropy是否值得?
我找了一个包括提供Ajax和jQuery的模块。它在这条岩石es6谈论HTML5承诺(承诺是一个图书馆polyfill样q)然后使用下面的代码片断从我copied软腭。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30function get(url) {
// Return a new promise.
return new Promise(function(resolve, reject) {
// Do the usual XHR stuff
var req = new XMLHttpRequest();
req.open('GET', url);
req.onload = function() {
// This is called even on 404 etc
// so check the status
if (req.status == 200) {
// Resolve the promise with the response text
resolve(req.response);
}
else {
// Otherwise reject with the status text
// which will hopefully be a meaningful error
reject(Error(req.statusText));
}
};
// Handle network errors
req.onerror = function() {
reject(Error("Network Error"));
};
// Make the request
req.send();
});
}注:在我写了关于这个的文章。
如果你不想使用jQuery,我尝试了一些轻量级的Ajax库。
我最喜欢的是reqwest。它只3.4kb和很好的建出:http:////reqwest DED github.com
这是一个一个GET请求reqwest示例:
1
2
3
4
5
6reqwest({
url: url,
method: 'GET',
type: 'json',
success: onSuccess
});现在如果你想要的东西,甚至更多的是,我microajax at a try大0.4kb:http://///P microajax code.google.com
这是所有的代码在这里:
1function microAjax(B,A){this.bindFunction=function(E,D){return function(){return E.apply(D,[D])}};this.stateChange=function(D){if(this.request.readyState==4){this.callbackFunction(this.request.responseText)}};this.getRequest=function(){if(window.ActiveXObject){return new ActiveXObject("Microsoft.XMLHTTP")}else{if(window.XMLHttpRequest){return new XMLHttpRequest()}}return false};this.postBody=(arguments[2]||"");this.callbackFunction=A;this.url=B;this.request=this.getRequest();if(this.request){var C=this.request;C.onreadystatechange=this.bindFunction(this.stateChange,this);if(this.postBody!==""){C.open("POST",B,true);C.setRequestHeader("X-Requested-With","XMLHttpRequest");C.setRequestHeader("Content-type","application/x-www-form-urlencoded");C.setRequestHeader("Connection","close")}else{C.open("GET",B,true)}C.send(this.postBody)}};这是一个示例调用:
1microAjax(url, onSuccess);- 我认为microajax有问题,当你两次调用它时(因为有许多"这个",我认为,一定有碰撞)。我不知道叫两个"新微JAX"是不是一个很好的解决方法,是吗?
但我老想尝试,也许有人会发现这个信息有用。
这是最小的代码量你需要做一些
JSON fetch aGET 请求和格式化数据。这是只适用的现代浏览器的最新版本的FF样(铬,歌剧,Safari,和微软的边缘。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/data.json'); // by default async
xhr.responseType = 'json'; // in which format you expect the response to be
xhr.onload = function() {
if(this.status == 200) {// onload called even on 404 etc so check the status
console.log(this.response); // No need for JSON.parse()
}
};
xhr.onerror = function() {
// error
};
xhr.send();因此,检查新的fetch API这是一基于XMLHttpRequest API的可替代。
从youmightnotneedjquery.com +
JSON.stringify 1
2
3
4var request = new XMLHttpRequest();
request.open('POST', '/my/url', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.send(JSON.stringify(data));这可能帮助:
1
2
3
4
5
6
7
8
9
10
11
12function doAjax(url, callback) {
var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
callback(xmlhttp.responseText);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
Well it is just a 4 step easy proceess,
我希望它帮助
Step 1. 商店参考的XMLHttpRequest对象1var xmlHttp = createXmlHttpRequestObject();Step 2. XMLHttpRequest对象检索。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25function createXmlHttpRequestObject() {
// will store the reference to the XMLHttpRequest object
var xmlHttp;
// if running Internet Explorer
if (window.ActiveXObject) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
xmlHttp = false;
}
}
// if running Mozilla or other browsers
else {
try {
xmlHttp = new XMLHttpRequest();
} catch (e) {
xmlHttp = false;
}
}
// return the created object or display an error message
if (!xmlHttp)
alert("Error creating the XMLHttpRequest object.");
else
return xmlHttp;
}Step 3. 化妆品使用XMLHttpRequest对象异步HTTP请求1
2
3
4
5
6
7
8
9
10
11
12
13function process() {
// proceed only if the xmlHttp object isn't busy
if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
// retrieve the name typed by the user on the form
item = encodeURIComponent(document.getElementById("input_item").value);
// execute the your_file.php page from the server
xmlHttp.open("GET","your_file.php?item=" + item, true);
// define the method to handle server responses
xmlHttp.onreadystatechange = handleServerResponse;
// make the server request
xmlHttp.send(null);
}
}当一
Step 4. 自动执行从服务器收到的邮件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17function handleServerResponse() {
// move forward only if the transaction has completed
if (xmlHttp.readyState == 4) {
// status of 200 indicates the transaction completed successfully
if (xmlHttp.status == 200) {
// extract the XML retrieved from the server
xmlResponse = xmlHttp.responseText;
document.getElementById("put_response").innerHTML = xmlResponse;
// restart sequence
}
// a HTTP status different than 200 signals an error
else {
alert("There was a problem accessing the server:" + xmlHttp.statusText);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34<html>
var xmlDoc = null ;
function load() {
if (typeof window.ActiveXObject != 'undefined' ) {
xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
xmlDoc.onreadystatechange = process ;
}
else {
xmlDoc = new XMLHttpRequest();
xmlDoc.onload = process ;
}
xmlDoc.open("GET","background.html", true );
xmlDoc.send( null );
}
function process() {
if ( xmlDoc.readyState != 4 ) return ;
document.getElementById("output").value = xmlDoc.responseText ;
}
function empty() {
document.getElementById("output").value = '' ;
}
<body>
<textarea id="output" cols='70' rows='40'></textarea>
</br>
<button onclick="load()">Load</button>
<button onclick="empty()">Clear</button>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112var load_process = false;
function ajaxCall(param, response) {
if (load_process == true) {
return;
}
else
{
if (param.async == undefined) {
param.async = true;
}
if (param.async == false) {
load_process = true;
}
var xhr;
xhr = new XMLHttpRequest();
if (param.type !="GET") {
xhr.open(param.type, param.url, true);
if (param.processData != undefined && param.processData == false && param.contentType != undefined && param.contentType == false) {
}
else if (param.contentType != undefined || param.contentType == true) {
xhr.setRequestHeader('Content-Type', param.contentType);
}
else {
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
}
else {
xhr.open(param.type, param.url +"?" + obj_param(param.data));
}
xhr.onprogress = function (loadTime) {
if (param.progress != undefined) {
param.progress({ loaded: loadTime.loaded },"success");
}
}
xhr.ontimeout = function () {
this.abort();
param.success("timeout","timeout");
load_process = false;
};
xhr.onerror = function () {
param.error(xhr.responseText,"error");
load_process = false;
};
xhr.onload = function () {
if (xhr.status === 200) {
if (param.dataType != undefined && param.dataType =="json") {
param.success(JSON.parse(xhr.responseText),"success");
}
else {
param.success(JSON.stringify(xhr.responseText),"success");
}
}
else if (xhr.status !== 200) {
param.error(xhr.responseText,"error");
}
load_process = false;
};
if (param.data != null || param.data != undefined) {
if (param.processData != undefined && param.processData == false && param.contentType != undefined && param.contentType == false) {
xhr.send(param.data);
}
else {
xhr.send(obj_param(param.data));
}
}
else {
xhr.send();
}
if (param.timeout != undefined) {
xhr.timeout = param.timeout;
}
else
{
xhr.timeout = 20000;
}
this.abort = function (response) {
if (XMLHttpRequest != null) {
xhr.abort();
load_process = false;
if (response != undefined) {
response({ status:"success" });
}
}
}
}
}
function obj_param(obj) {
var parts = [];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
}
}
return parts.join('&');
}我的AJAX调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19var my_ajax_call=ajaxCall({
url: url,
type: method,
data: {data:value},
dataType: 'json',
async:false,//synchronous request. Default value is true
timeout:10000,//default timeout 20000
progress:function(loadTime,status)
{
console.log(loadTime);
},
success: function (result, status) {
console.log(result);
},
error :function(result,status)
{
console.log(result);
}
});流产以前的请求。
1
2
3my_ajax_call.abort(function(result){
console.log(result);
});HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34<!DOCTYPE html>
<html>
<head>
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","1.php?id=99freebies.blogspot.com",true);
xmlhttp.send();
}
</head>
<body>
Let AJAX change this text
<button type="button" onclick="loadXMLDoc()">Change Content</button>
</body>
</html>PHP的:
1
2
3
4
5
6<?php
$id = $_GET[id];
print"$id";
?>- 单行ifs不需要大括号,没有人使用ie6,这可能是复制粘贴的,使用onload而不是onreadystatechange,捕捉可能递归调用的错误,xmlhttp是一个糟糕的变量名,只需调用它x。
这是一个没有jsfiffle jQuery
jsfiddle.net http:/ / / / / jurwre07日冕
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21function loadXMLDoc() {
var xmlhttp = new XMLHttpRequest();
var url = 'http://echo.jsontest.com/key/value/one/two';
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == XMLHttpRequest.DONE) {
if (xmlhttp.status == 200) {
document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
} else if (xmlhttp.status == 400) {
console.log('There was an error 400');
} else {
console.log('something else other than 200 was returned');
}
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
};
loadXMLDoc();
XMLHttpRequest的()你可以使用
XMLHttpRequest() 构造函数创建一个新对象XMLHttpRequest (XHR),这将使你有一个服务器交互使用标准的HTTP请求方法(如GET 和POST ):1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16const data = JSON.stringify({
example_1: 123,
example_2: 'Hello, world!',
});
const request = new XMLHttpRequest();
request.addEventListener('load', function () {
if (this.readyState === 4 && this.status === 200) {
console.log(this.responseText);
}
});
request.open('POST', 'example.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.send(data);fetch()
所以,你可以使用一个
Promise fetch() 方法获得一个对象的一个resolvesResponse 响应您的请求。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18const data = JSON.stringify({
example_1: 123,
example_2: 'Hello, world!',
});
fetch('example.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
},
body: data,
}).then(response => {
if (response.ok) {
response.text().then(response => {
console.log(response);
});
}
});navigator.sendbeacon()
在其他的手,如果你是一个简单的
POST N的数据并不需要从A服务器响应,在最短的解决方案将使用navigator.sendBeacon() :1
2
3
4
5
6const data = JSON.stringify({
example_1: 123,
example_2: 'Hello, world!',
});
navigator.sendBeacon('example.php', data);使用上面的答案为A"佩巨大的帮助资源。我写我自己的Ajax模块,这里称为AJ的短:http:////nightfallalicorn github.com AJ和测试,而不需要一个和我得到它后为JSON。你可以随意复制和使用源代码为你的愿望。我没回答,是公认的A T的湖泊,这是好的,所以我presume张贴。
在普通的JavaScript在浏览器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE ) {
if(xhr.status == 200){
console.log(xhr.responseText);
} else if(xhr.status == 400) {
console.log('There was an error 400');
} else {
console.log('something else other than 200 was returned');
}
}
}
xhr.open("GET","mock_data.json", true);
xhr.send();或者如果你想使用你的模块browserify到束node.js启动使用。你可以使用超级特工:
1
2
3
4
5
6
7
8
9
10
11
12var request = require('superagent');
var url = '/mock_data.json';
request
.get(url)
.end(function(err, res){
if (res.ok) {
console.log('yay got ' + JSON.stringify(res.body));
} else {
console.log('Oh no! error ' + res.text);
}
});一个良好的解决方案verry纯JavaScript是这里
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104/*create an XMLHttpRequest object*/
let GethttpRequest=function(){
let httpRequest=false;
if(window.XMLHttpRequest){
httpRequest =new XMLHttpRequest();
if(httpRequest.overrideMimeType){
httpRequest.overrideMimeType('text/xml');
}
}else if(window.ActiveXObject){
try{httpRequest =new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
httpRequest =new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){}
}
}
if(!httpRequest){return 0;}
return httpRequest;
}
/*Defining a function to make the request every time when it is needed*/
function MakeRequest(){
let uriPost ="myURL";
let xhrPost =GethttpRequest();
let fdPost =new FormData();
let date =new Date();
/*data to be sent on server*/
let data = {
"name" :"name",
"lName" :"lName",
"phone" :"phone",
"key" :"key",
"password" :"date"
};
let JSONdata =JSON.stringify(data);
fdPost.append("data",JSONdata);
xhrPost.open("POST" ,uriPost, true);
xhrPost.timeout = 9000;/*the time you need to quit the request if it is not completed*/
xhrPost.onloadstart = function (){
/*do something*/
};
xhrPost.onload = function (){
/*do something*/
};
xhrPost.onloadend = function (){
/*do something*/
}
xhrPost.onprogress =function(){
/*do something*/
}
xhrPost.onreadystatechange =function(){
if(xhrPost.readyState < 4){
}else if(xhrPost.readyState === 4){
if(xhrPost.status === 200){
/*request succesfull*/
}else if(xhrPost.status !==200){
/*request failled*/
}
}
}
xhrPost.ontimeout = function (e){
/*you can stop the request*/
}
xhrPost.onerror = function (){
/*you can try again the request*/
};
xhrPost.onabort = function (){
/*you can try again the request*/
};
xhrPost.overrideMimeType("text/plain; charset=x-user-defined-binary");
xhrPost.setRequestHeader("Content-disposition","form-data");
xhrPost.setRequestHeader("X-Requested-With","xmlhttprequest");
xhrPost.send(fdPost);
}
/*PHP side
<?php
//check if the variable $_POST["data"] exists isset() && !empty()
$data =$_POST["data"];
$decodedData =json_decode($_POST["data"]);
//show a single item from the form
echo $decodedData->name;
?>
*/
/*Usage*/
MakeRequest(); - 使用
- 关于javascript:没有jQuery的getJSON函数的等价物
- 关于javascript:没有JQuery的Ajax?
- 关于jquery:Vanilla Javascript版的AJAX
- 如何在不使用Ajax和JavaScript重新加载的情况下将一个php页面的值传递给另一个页面
- 如何使用AJAX / Javascript打印响应?
- 关于javascript:没有jQuery的Ajax
- 如何在javascript中从url获取文件数据
- 关于javascript:在不使用JQuery的情况下执行$ .getJSON
- 使用JavaScript计算值并发送给PHP
- 从外部javascript文件调用c#logic
- 关于regex:如何在javascript中验证电子邮件地址?
- JavaScript闭包如何工作?
- 关于javascript:如何检查jquery中是否隐藏了元素?
- 关于javascript:如何在jquery ajax调用后管理重定向请求
- var functionName = function(){} vs function functionName(){}
- 关于javascript:使用jquery中止Ajax请求
- 关于javascript:如何重定向到另一个网页?
- 关于语法:在JavaScript中"use strict"是做什么的,它背后的推理是什么?
- 关于javascript:如何从异步调用返回响应?
- 关于JavaScript的:"如果我有一个想法在angularjs"jQuery的背景?