Salut, nu am cunostinte destule in javascript,or in jquery, si incerc sa dezvolt un script.
El va trebui sa-mi faca un loop din array, si la fiecare rezultat sa-mi faca un get cu jquery la o pagina, si sa treaca la urmatoarea,doar daca cererea curenta s-a efectuat.
Mai jos este codul meu, insa este gresit pentru aceasta varianta.
var list = ['<?=implode("', '", $list)?>'];
for (var i = 0; i < list.length; i++)
{
$.get("save.php?file="+list[i], function(data)
{
//am facu prima cerere, va trebui sa trec la urmatoarea, dar cum ?
});
}
Pentru că AJAX este asincron, nu merge cum încerci tu.
Apoi, dacă list va avea mai mult de 4-6 elemente, va dura ceva până vor fi iterate toate (browserele suportă 4-6 conexiuni simultane). Cea mai bună chestie ce o poți face ar fi să modifici save.php astfel încât să accepte toate elementele dintr-un foc.
Sau te poti folosi de deferred objects returnate de catre jquery cand folosesti ajax requesturi. Codul ar trebui sa fie de forma: (nu l-am testat inca)
var x = [];
for (var i = 0; i < 3; i++){
x.push($.get('https://randomuser.me/api/'))
};
$.when.apply($, x).done(function() {
for (var i = 0; i < arguments.length; i++) {
//arguments[i] is the return of the singular done() statement
console.log("Show",arguments[i]);
}
}).fail(function(){
alert("Failed");
});
pe naiba, ca am maxim 50 de get-uri de facut, defapt sa explic despre ce e vorba.
save.php descarca un mp3 dupa net si-l salveaza pe localhost, de aceea nu-mi permit sa le fac dintr-un foc.
si ma gandeam ca atunci cand se salveaza unul din array, sa mearga mai departe, si bineinteles ca doream sa afisez intr-un div un text care sa spuna ce fisier proceseaza.
acum ma gandesc ca daca as pune un raspuns in save.php , de genul success, si sa-l citeasca functia mea de get, sa reia cu urmatorul…acum imi veni ideea, si-ar trebui cam asa: (teoretic, nimic sigur)
if(data=='success')
{
continua cu urmatorul get;
}
Dar de unde naiba sa iau pe urmatorul, asta excluzand loop-ul oarecum,cumva…sunt in ceata rau.
e posibil sa fi inteles gresit ce vrei tu. Tu vrei din browser se le pui in sir indian (adica unul dupa altul?). De ce nu trimiti toate request-urile direct catre server?
Daca le vrei insiruite din client, atunci solutia @iamntz este cea corect.
In ceea ce priveste solutia mea, in x puneai rezultat-ul functiei de call ajax din jquery (pe care poti avea collback-uri cand e gata sau cand da failed) si nu contentul rezultat din request-ul httml.
console.log - o sa iti afiseze content cand toate joburile sunt done.
Multumesc frumos, intr-adevar, vad ca aceasta este metoda care-ar trebui s-o folosesc. Cum spuneam mai sus, n-am cunostintele necesare pt asa ceva, insa uite ce-am reusit sa fac eu:
am populat un tag p, sa vad pe unde se afla functia mea, totul merge ok. Insa acum nu stiu cum sa iau raspunsul primit de la get, pentru a ma putea folosi de el.Cum eram eu obisnuit:
Multumesc frumos, a functionat bine. Am ajuns in ultima faza a proiectului, insa bineinteles ca trea’ sa fie ceva.Ideea este ca daca dureaza mult, pe save.php, sau nu stiu cum naiba se-ntampla, ca imi cam sare direct la 5 sau 6. Si observ ca dureaza putin pana imi returneaza rezultatul, apoi o ia mai repede dupa 5.
Am incercat sa pun done, sa-mi ca iteratorul sa creasca doar daca s-a procesat, dar nu s-a schimbat nimic.
function iterateOverAjax() {
$.get( 'save.php', { file : currentIterator }, saveCallback ).done(function( data )
{
currentIterator++
});
}
Dupa aceea am crezut ca pana mi se incarca pagina,el poate face niste executii, asa ca am incercat si varianta: