Chrome jQuery, AJAX scheitern, nicht eine cross-domain-Problem
Habe ich einige einfache JS/jQuery-code, um einen AJAX-Aufruf zu greifen einige HTML und schieben Sie es in ein div auf meiner Seite. Dies funktioniert gut in Firefox, aber scheitert in Chrome.
In der Chrome-console kann ich sehen, der AJAX-Anfrage mit einem status-text "(fehlgeschlagen)" und den Typ "pending".
Alle, die die Suche, die ich getan habe wurde durchsucht, ist im Zusammenhang mit cross-domain-Probleme. Das paßt nicht hier, bei mir läuft diese auf einem webserver mit domain-Namen, ohne eine port-Nummer angehängt werden.
Hier ist mein code-Beispiel (Sie können sehen, war ich zunächst versuchen, zu verwenden .load(), gleiche problem):
$('#brochure2012navigation a').click(function(event)
{
event.preventDefault();
//$('#brochurePage').load($(this).attr('href'));
$.ajax({
url: $(this).attr('href'),
dataType: 'html',
success: function(html) {
$('#brochurePage').html(html);
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(xhr);
console.log(thrownError);
},
});
});
In der Chrome-console die angemeldeten xhr-Objekt sieht wie folgt aus:
Object {readyState: 0, setRequestHeader: function, getAllResponseHeaders: function, getResponseHeader: function, overrideMimeType: function…}
abort: function (a){a=a||"abort",p&&p.abort(a),w(0,a);return this}
always: function (){i.done.apply(i,arguments).fail.apply(i,arguments);return this}
complete: function (){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}
done: function (){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}
error: function (){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}
fail: function (){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}
getAllResponseHeaders: function (){return s===2?n:null}
getResponseHeader: function (a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c}
isRejected: function (){return!!i}
isResolved: function (){return!!i}
overrideMimeType: function (a){s||(d.mimeType=a);return this}
pipe: function (a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()}
progress: function (){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}
promise: function (a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}
readyState: 0
responseText: ""
setRequestHeader: function (a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this}
state: function (){return e}
status: 0
statusCode: function (a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this}
statusText: "error"
success: function (){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}
then: function (a,b,c){i.done(a).fail(b).progress(c);return this}
__proto__: Object
Entschuldige mich, dass dies hier sieht ein bisschen chaotisch, aber ich denke, das wichtigste ist der status 0.
Überwachung der Protokolle, die Anfrage ist nicht zu schlagen, mein server.
Ich bin echt ratlos hier, ich würde schätzen jede Hilfe!!!
Cheers,
Al
- Welche version von Chrome benutzen Sie?
- Tut
$(this).attr('href')
geben Sie eine gültige url? nicht gehen, die Seite direkt funktioniert? was sind Sie immer in der Registerkarte "Netzwerk" für die ajax-Anfrage? (Strg+shift+j in Chrome) - hast du test mit einer statischen url (statt mit $(this).href) ?
- Vielen Dank für die Eingabe Jungs. In der Antwort auf die Fragen: - Chrome 24.0.1312.52 und eine Windows-version von Chrome (auch die jüngsten) - $(dies).attr('href') funktioniert, und ich haben überprüft, dass die Seite lädt korrekt - ich habe versucht, hart zu Kodieren eine statische URL verwendet werden, keine Freude
- Gibt es eine .htaccess Regeln (schreibt)? Ich würde gerne sehen, ein Bildschirmfoto von der Registerkarte "Netzwerk" dieser besonderen Anforderung
- können Sie für ein funktionierendes code-Beispiel? Entweder JS-fiddle oder besser live auf dem server.
- zumindest zeigen Sie uns den Inhalt von tnk-link mit id "brochure2012navigation".
- Haben Sie versucht, das hartcodieren eine ganz andere URL wie www.google.com?
- Beachten Sie, dass eine subdomain ist eine weitere Herkunft.
- Wenn die Anfrage nicht auf Ihrem server haben, das ist sehr verdächtig. Auch im Falle einer blockiert cross-domain-Anfrage, die Anfrage sollte auf eurem sever. Das bedeutet entweder, dass eine cross-domain-preflight-OPTIONS-Anforderung ist, schlagen Sie Ihre server statt, oder vielleicht haben Sie ein browser-cache problem. (Haben Sie versucht, Ihren cache leeren?)
- Sind Sie den Zugriff auf die HTML-Seite von einem
file://
URL? Wenn dem so ist, finden Sie unter: stackoverflow.com/questions/3595515/... - Der Schlüssel zu dieser Frage ist die url der Seite und die
href
- Attribut eines link geklickt... Bitte, zeigen Sie uns helfen Ihr problem lösen...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, dass der ajax-Aufruf blockiert der AdBlock Chrome addon.
Einige URLs könnten blockiert werden, basierend auf den Schlüssel auf das adblock-blacklist.
Auf DevTools Registerkarte "Netzwerk", solche Anfragen werden gekennzeichnet als "fehlgeschlagen" in der status 'ausstehend'
Du code scheint perfekt, aber einige Tippfehler gesehen in deinem code, ich habe einige der anderen elems
haben Sie vielleicht Interesse bekommen, in:
async:false
Dieser Linie lösen mein problem aber nicht, was es bedeutet , Kann u bitte Erklären.?Machte ich eine kleine änderung an Ihrem code:
Nach, dass ich deinen code auf jsfiddle:
http://jsfiddle.net/kyz69/1/
Ich bin immer der Inhalt von /_display/( http://fiddle.jsshell.net/_display )
Ich bin Verlinkung, da Sie nicht geben Sie die url, die Sie versuchen zu laden und das war die einzige Seite die ich finden konnte, die würde, die Daten zurückgeben, weil es nicht cross-domain.
Getestet habe ich den code auf Windows + Google Chrome Version 24.0.1312.52 m
Können Sie testen, Geige und poste hier das Ergebnis?
könnte es sein das nachgestellte Komma nach der error-Funktion die Klammer schließen? In der Regel Sie nur ein Komma, wenn es zusätzliche Objekte...
Ich wünschte, ich habe genug Ruf, um einen Kommentar zu bitten, für weitere details, aber ich weiß nicht. Also werde ich mein bestes geben, denke durch Erfahrung.
Wenn es ein cross-domain-Problem, Chrome würde sich angemeldet haben, wird eine Fehlermeldung in der console in rot. Testen Sie in diesem Fiddle.
Einen Weg, den ich kenne, der helfen könnte, ist, um Benutzer mit einem sniffer. Zum Glück Chrome haben einen einfachen ein-gebaut in die
Chrome Developer Tool
durch drückenCtrl + Shift + I
, ich denke, Sie wahrscheinlich wissen, wie Sie kopiert haben, die Ausgabe in der Konsole, aber dieses mal gehen Sie auf dieNetwork
Registerkarte, stellen Sie sicher, es bleibt geöffnet, wenn Sie auf den link, löst das click-Ereignis-handler.Sehen Sie einen neuen Datensatz in der Tabelle angezeigt, klicken Sie auf seinen Namen, und Sie können werfen Sie einen Blick auf die Anfrage-Header, oder sogar gerendert reagiert. Hoffentlich wird dies geben weitere hilfreiche Informationen, wie ich in der Regel mir hier.
Warum Sie nicht versuchen, diese
Glück!
Letzte Attribut, ajax oder json endet nicht mit Komma , kein Zweifel, es wurde nicht in chrome & IE aber, warum laufen gut in firefox, bin ich überfragt :), versuchen Sie dies:
Den meisten Browsern nicht wirklich wieder jede Art von interessanten Fehler, wenn es ist ein cross-domain-scripting-Problem. Jede eins, die ich verwendet habe gibt einen StatusText der "error" und eine readyState 0, als Sie gezeigt haben. Sie können sich denken, es gibt keine crossdomain Los ist, weil Sie tatsächlich etwas rufen aus der gleichen Domäne, vielleicht auch eine andere subdomain oder einen anderen port (https - /nicht-https). Es ist möglich, dass Sie eine out-of-date-version von Firefox, die kein Ersatz für cross-domain-Beschränkungen. Sie können überprüfen, die in Ihren Chrome, indem Sie die Suche in der Net-Anfrage als letzten Poster vorgeschlagen haben, und auf der Suche nach der Eigenschaft: "Herkunft: null,"
Wenn in der Tat es stellt sich heraus, dass eine cross-domain-Problem (ich denke, es ist), müssen Sie die folgende Zeile hinzufügen, PHP (oder eine ähnliche überschrift in der backend-Sprache Ihrer Wahl) an die Spitze der die Datei, die Sie anfordern, vor jeglicher HTML-code.
Wenn Sie jquery verwenden, müssen Sie möglicherweise auch:
Wenn Ihr server nicht immer jede Anfrage und dann das problem liegen muss, innerhalb der URL, die Sie verwenden.
Geben Sie das Protokoll und die vollständigen URL oder nur teilweise?
Was passiert, wenn Sie hart code, einen link und verwenden Sie es? (wie folgt)
Wenn ich du wäre würde ich stellen Sie sicher, dass die $.ajax ist wirklich zu schlagen, Ihr Ziel nicht durch hardcoding ein bekanntes Ziel zuerst.
Wenn die einprogrammierte Ziel ist nicht immer jede Anfrage das problem liegt woanders.