Avatar billede shjorth Nybegynder
29. november 2011 - 17:29 Der er 8 kommentarer og
1 løsning

jQuery ajax fejl

Hejsa.. Jeg benytter mig af flg script:

var xhr;
function Ajax(afile,adiv,arun,loader) {
// Loading info
    if(loader==null) { gi("loaderdiv").style.display='inline'; }

// Process Ajax
    var htm = afile.split('?');
    var xhr = $.ajax({
        type: "GET",
        url: htm[0],
        data: htm[1],
    cache: false,
        success: function(html){
            gi("loaderdiv").style.display='none';
        $(gi(adiv)).fadeIn(100);
          $('#'+adiv).html(html);
        }
    });
    // Set global process ID
    window['xhr'] = xhr;

}

Det virker også fint, men desværre kan det i enkelte tilfælde ske at browseren bliver sendt til 'afile' istedet for at ajax henter 'afile' til den angivne div.

Er der nogen der ved hvordan dette løses ?
Det er desværre meget svært at genskabe, da det sker i forholdsvis sjældne tilfælde
Avatar billede olebole Juniormester
29. november 2011 - 19:55 #1
<ole>

Det lyder sært. Der må nødvendigvis være noget fælles for de situationer, hvor det går galt, så det må være opgaven at finde ud af, hvad. Prøv evt. at uploade et eksempel

/mvh
</bole>
Avatar billede shjorth Nybegynder
29. november 2011 - 21:25 #2
Jeg har testet lidt videre på det, og det ser ud til at det sker hvis man trykker på samme onclick event (link) mange gange i træk. På et tidspunkt wil den sende browseren til det link der burde hentes med Ajax.

Nogen ide om hvad det kan være ?
Avatar billede shjorth Nybegynder
29. november 2011 - 21:29 #3
Lidt ekstra info.

NÅR det sker at den redirecter, så dukker flg script fejl op:

attempt to run compile-and-go script on a cleared scope
jquery.js line: 16
Avatar billede olebole Juniormester
29. november 2011 - 23:52 #4
Hvad returnerer $ajax til xhr?
Avatar billede shjorth Nybegynder
30. november 2011 - 10:33 #5
xhr består af flg:

xhr[readyState] = 1
xhr[setRequestHeader] = function (a, b) {
    r || (l[a.toLowerCase().replace(bD, bE)] = b);
    return this;
}
xhr[getAllResponseHeaders] = function () {
    return r === 2 ? m : null;
}
xhr[getResponseHeader] = function (a) {
    var c;
    if (r === 2) {
        if (!n) {
            n = {};
            while ((c = bt.exec(m))) {
                n[c[1].toLowerCase()] = c[2];
            }
        }
        c = n[a.toLowerCase()];
    }
    return c === b ? null : c;
}
xhr[overrideMimeType] = function (a) {
    r || (e.mimeType = a);
    return this;
}
xhr[abort] = function (a) {
    a = a || "abort", o && o.abort(a), v(0, a);
    return this;
}
xhr[promise] = function (a) {
    if (a == null) {
        if (e) {
            return e;
        }
        e = a = {};
    }
    var c = z.length;
    while (c--) {
        a[z[c]] = b[z[c]];
    }
    return a;
}
xhr[isRejected] = function () {
    return c || b;
}
xhr[isResolved] = function () {
    return c || b;
}
xhr[fail] = function () {
    if (!e) {
        var c = arguments, g, h, i, j, k;
        b && (k = b, b = 0);
        for (g = 0, h = c.length; g < h; g++) {
            i = c[g], j = d.type(i), j === "array" ? f.done.apply(f, i) : j === "function" && a.push(i);
        }
        k && f.resolveWith(k[0], k[1]);
    }
    return this;
}
xhr[done] = function () {
    if (!e) {
        var c = arguments, g, h, i, j, k;
        b && (k = b, b = 0);
        for (g = 0, h = c.length; g < h; g++) {
            i = c[g], j = d.type(i), j === "array" ? f.done.apply(f, i) : j === "function" && a.push(i);
        }
        k && f.resolveWith(k[0], k[1]);
    }
    return this;
}
xhr[then] = function (a, c) {
    b.done(a).fail(c);
    return this;
}
xhr[success] = function () {
    if (!e) {
        var c = arguments, g, h, i, j, k;
        b && (k = b, b = 0);
        for (g = 0, h = c.length; g < h; g++) {
            i = c[g], j = d.type(i), j === "array" ? f.done.apply(f, i) : j === "function" && a.push(i);
        }
        k && f.resolveWith(k[0], k[1]);
    }
    return this;
}
xhr[error] = function () {
    if (!e) {
        var c = arguments, g, h, i, j, k;
        b && (k = b, b = 0);
        for (g = 0, h = c.length; g < h; g++) {
            i = c[g], j = d.type(i), j === "array" ? f.done.apply(f, i) : j === "function" && a.push(i);
        }
        k && f.resolveWith(k[0], k[1]);
    }
    return this;
}
xhr[complete] = function () {
    if (!e) {
        var c = arguments, g, h, i, j, k;
        b && (k = b, b = 0);
        for (g = 0, h = c.length; g < h; g++) {
            i = c[g], j = d.type(i), j === "array" ? f.done.apply(f, i) : j === "function" && a.push(i);
        }
        k && f.resolveWith(k[0], k[1]);
    }
    return this;
}
xhr[statusCode] = function (a) {
    if (a) {
        var b;
        if (r < 2) {
            for (b in a) {
                j[b] = [j[b], a[b]];
            }
        } else {
            b = a[u.status], u.then(b, b);
        }
    }
    return this;
}
Avatar billede olebole Juniormester
30. november 2011 - 17:03 #6
Jeg spurgte, hvad xhr returnerer
Avatar billede shjorth Nybegynder
30. november 2011 - 17:15 #7
Det èr hvad xhr returnerer
Avatar billede olebole Juniormester
30. november 2011 - 17:43 #8
Sorry, jeg så forkert  =)

Jeg ved ikke umiddelbart, hvad det er, der udløser fejlen - det ville kræve, jeg har adgang til din kode og en FF 5.

Prøv først at strippe din kode for alt, der behandler resultatet, så det kun er jQuery koden, som arbejder. Får du stadig fejlen, ved du så, at fejlen må ligge i et samspil mellem den pågældende browserversion og jQuery.

Er det tilfældet, må du undersøge arbejdsgangen gennem jQuery med en alert, til du finder stedet.
Avatar billede shjorth Nybegynder
01. december 2011 - 13:07 #9
Så fik jeg løst problemet. Det var en særdeles hård nød at knække, men det lykkedes til sidst.

Hvis nogen skulle rende ind i det samme.

Da jeg kører scriptet på facebooks platform, har jeg facebook.php included samt deres auth script.
I auth scriptet ligger en linje:
<script type='text/javascript'>top.location.href = '$loginUrl';</script>
Når ajax bliver hentet, kan denne linje i nogle tilfælde blive kaldt, og gør så at scriptet vil reloade browseren og sende den til den url ajax forsøger at hente.
Jeg løste det ved at erstatte med Header("Location..
Måske ikke den helt rigtige metode, men det løste problemet.

Tak for hjælpen olebole
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester