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
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;
}
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.
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