Oprettet tir. d. 29. november 2011 kl. 17:29:09

shjorth
shjorth (4.660 point. Point ude: 390)

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

Skrevet tir. d. 29. november 2011 kl. 19:55:21| #1

olebole
olebole (214.613 point)
<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>

Skrevet tir. d. 29. november 2011 kl. 21:25:50| #2

shjorth
shjorth (4.660 point)
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 ?

Skrevet tir. d. 29. november 2011 kl. 21:29:47| #3

shjorth
shjorth (4.660 point)
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

Skrevet tir. d. 29. november 2011 kl. 23:52:00| #4

olebole
olebole (214.613 point)
Hvad returnerer $ajax til xhr?

Skrevet ons. d. 30. november 2011 kl. 10:33:31| #5

shjorth
shjorth (4.660 point)
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;
}

Skrevet ons. d. 30. november 2011 kl. 17:03:27| #6

olebole
olebole (214.613 point)
Jeg spurgte, hvad xhr returnerer

Skrevet ons. d. 30. november 2011 kl. 17:15:30| #7

shjorth
shjorth (4.660 point)
Det èr hvad xhr returnerer

Skrevet ons. d. 30. november 2011 kl. 17:43:54| #8

olebole
olebole (214.613 point)
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.

Skrevet tor. d. 01. december 2011 kl. 13:07:56| #9

shjorth
shjorth (4.660 point)
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

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Hjælp til validering

Oprettet den 26. maj 2012 kl. 14.01
Stefan1 giver 20 point for svar | Giv et svar »

Javascript sliders?

Oprettet den 24. maj 2012 kl. 11.29
NizeGuy giver 15 point for svar | Giv et svar »

Validere navn i form

Oprettet den 22. maj 2012 kl. 15.13
13thsky giver 60 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger