Ich habe verschiedene Ajax-Aufrufe zu gleichen API mit anderen Pfad und Abfrage in URL, aber mit mit gleichen jsonpCallback kann ich nichtmehrere Ajax mit dem gleichen jsonpCallback wie Rückruf getan
ändern, wenn ich eine Ajax genannt URL - alles in Ordnung!
Aber wenn ich Antworten von mehreren erhalten muss, habe ich Fehler, verursachen ihre Ausführung sofort. Ich habe versucht Rückrufe, tryed I "async: false", tryed I „Rückkehr Ajax mit wenn, dann, etc gemacht - nichts funktioniert, wie ich :(erwartet
function timenow() {
var a = new Date,
b = a.getMinutes();
b < 10 && (b = "0" + b);
var c = a.getHours();
c > 12 && (c -= 12);
var d = c + ":" + b;
return d
}
function ajaxCall(p, callback) {
if (p == 1) {
url = 'https://api.vk.com/method/wall.get?owner_id=-93100300&offset=0&count=1&filter=owner&callback=logResults'
} else {
url = "https://api.github.com/users/jeresig?callback=logResults"
}
return $.ajax({
url: url,
dataType: "jsonp",
jsonp: false,
jsonpCallback: "logResults",
cache: true,
}).done(function(r) {
callback(r);
});
}
$.when(
ajaxCall(0, function(r) {
console.log(r);
console.log(r.data.avatar_url + ' ' + timenow());
}),
ajaxCall(1, function(r) {
console.log(r);
console.log(r.response[1].id + ' ' + timenow());
}),
ajaxCall(0, function(r) {
console.log(r.data.bio + ' ' + timenow());
}),
ajaxCall(1, function(r) {
console.log(r.response[1].id + ' ' + timenow());
}),
ajaxCall(0, function(r) {
console.log(r.data.blog + ' ' + timenow());
}),
ajaxCall(1, function(r) {
console.log(r.response[1].from_id + ' ' + timenow());
}),
ajaxCall(0, function(r) {
console.log(r.data.company + ' ' + timenow());
}),
ajaxCall(1, function(r) {
console.log(r.response[1].to_id + ' ' + timenow());
}),
ajaxCall(0, function(r) {
console.log(r.data.created_at + ' ' + timenow());
}),
ajaxCall(1, function(r) {
console.log(r.response[1].date + ' ' + timenow());
}),
ajaxCall(0, function(r) {
console.log(r.data.email + ' ' + timenow());
}),
ajaxCall(1, function(r) {
console.log(r.response[1].post_type + ' ' + timenow());
}),
ajaxCall(0, function(r) {
console.log(r.data.events_url + ' ' + timenow());
}),
ajaxCall(1, function(r) {
console.log(r.response[1].text + ' ' + timenow());
}),
ajaxCall(0, function(r) {
console.log(r.data.followers + ' ' + timenow());
}),
ajaxCall(1, function(r) {
console.log(r.response[1].is_pinned + ' ' + timenow());
}),
ajaxCall(0, function(r) {
console.log(r.data.followers_url + ' ' + timenow());
}),
ajaxCall(1, function(r) {
console.log(r.response[1].reposts.count + ' ' + timenow());
}),
ajaxCall(0, function(r) {
console.log(r.data.following + ' ' + timenow());
}),
ajaxCall(1, function(r) {
console.log(r.response[1].likes.count + ' ' + timenow());
}),
ajaxCall(0, function(r) {
console.log(r.data.following_url + ' ' + timenow());
}),
ajaxCall(1, function(r) {
console.log(r.response[1].comments.count + ' ' + timenow());
}),
ajaxCall(0, function(r) {
console.log(r.data.gists_url + ' ' + timenow());
})
).done(console.log('Ajaxing done ' + timenow()));
Ich denke Problem in gleichen jsonpCallback , so dass, wenn ich Rückruf in ajax verwende es immer umschreibt es mit neuer Funktion, so dass ich bin immer Fehler.
PS kann immer noch nicht eingerichtet async auf false Probe arbeitet https://jsfiddle.net/ypmkn5k0/
<div id="log"></div>
<script>
$.ajaxSetup({ async: false});
$.ajax({
url: 'https://api.github.com/users/jeresig?callback=logResults',
dataType: "jsonp",
jsonp: false,
jsonpCallback: "logResults",
cache: true,
async: false,
}).done(function(r) {
$('#log').append(r.data.avatar_url+'</br>');
});
$('#log').append('Ajaxing done </br>');
</script>
Oh
P.S.S, überprüfte ich Dokumentation noch einmal, jetzt verstehe ich, sehr traurig (((
domänenübergreifende Anfragen und Datentyp: „JSONP“ Anfragen nicht unterstützen synchronen Betrieb.
PSSS Ich habe mit callbacking letzte versuchen und es ist WORKS, FUK-FUK-FUK, weiß nicht, warum es nicht auf realen Projekt, aber ich werde es EMPLIMENT TRY:
function timenow(){var a=new Date,b=a.getMinutes();b<10&&(b="0"+b);var c=a.getHours();c>12&&(c-=12);var d=c+":"+b;return d}
function ajaxCall(p,callback) {
if(p==1){
url='https://api.vk.com/method/wall.get?owner_id=-93100300&offset=0&count=1&filter=owner&callback=logResults'
} else {
url="https://api.github.com/users/jeresig?callback=logResults"
}
$.ajax({
url: url,
dataType: "jsonp",
jsonp: false,
jsonpCallback: "logResults",
cache: true,
success: function (r) {
callback(r);
},
});
}
ajaxCall(0,function(r){console.log(r); console.log(r.data.avatar_url+' '+timenow());
ajaxCall(1,function(r){console.log(r); console.log(r.response[1].id+' '+timenow());
ajaxCall(0,function(r){console.log(r.data.bio+' '+timenow());
ajaxCall(1,function(r){console.log(r.response[1].id+' '+timenow());
ajaxCall(0,function(r){console.log(r.data.blog+' '+timenow());
ajaxCall(1,function(r){console.log(r.response[1].from_id+' '+timenow());
ajaxCall(0,function(r){console.log(r.data.company+' '+timenow());
ajaxCall(1,function(r){console.log(r.response[1].to_id+' '+timenow());
ajaxCall(0,function(r){console.log(r.data.created_at+' '+timenow());
ajaxCall(1,function(r){console.log(r.response[1].date+' '+timenow());
ajaxCall(0,function(r){console.log(r.data.email+' '+timenow());
ajaxCall(1,function(r){console.log(r.response[1].post_type+' '+timenow());
ajaxCall(0,function(r){console.log(r.data.events_url+' '+timenow());
ajaxCall(1,function(r){console.log(r.response[1].text+' '+timenow());
ajaxCall(0,function(r){console.log(r.data.followers+' '+timenow());
ajaxCall(1,function(r){console.log(r.response[1].is_pinned+' '+timenow());
ajaxCall(0,function(r){console.log(r.data.followers_url+' '+timenow());
ajaxCall(1,function(r){console.log(r.response[1].reposts.count+' '+timenow());
ajaxCall(0,function(r){console.log(r.data.following+' '+timenow());
ajaxCall(1,function(r){console.log(r.response[1].likes.count+' '+timenow());
ajaxCall(0,function(r){console.log(r.data.following_url+' '+timenow());
ajaxCall(1,function(r){console.log(r.response[1].comments.count+' '+timenow());
ajaxCall(0,function(r){console.log(r.data.gists_url+' '+timenow());
console.log('Ajaxing done '+timenow());
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
});
Sie können nicht gleichzeitig ausgeführt werden, weil Javascript single-threaded ist. – Barmar
Wo ist die Definition von 'logResults'? – Barmar
Können Sie bitte die Fehlerinformationen angeben, die Sie erhalten? Der Hauptpunkt von AJAX ist die Asynchronität, und Sie können den obigen Kommentar ignorieren, denn sobald eine Ajax-Kommunikation gestartet wird, wird der Rest der Funktion fortgesetzt. –