2010-06-28 18 views
9

Ich habe einen Server bei example.com Apache, meine statische HTML-Dateien dienen.Ajax Anrufe an Subdomain

Ich habe auch einen JSON-Dienst unter api.example.com mit Python mit cherrypy.

Der Benutzer fordert example.com an und ruft die Index-HTML-Seite ab. Auf dieser Seite mache ich eine Ajax-Anfrage mit jquery an den json-Dienst. document.domain kehrt example.com

 $.ajax({ 
     type: 'GET', 
     url: 'http://api.example.com/resource/', 
     dataType: 'json', 
     success: successCallback, 
     error: errorHandler 
    }); 

Allerdings kann ich sehe den Antworttext für den Ajax-Request in Firebug nicht. Dies führt zu der Annahme, dass der Browser (FF) dies nicht unterstützt.

Was sind die besten Methoden, um dies zu erreichen? Ich würde es vorziehen, wenn möglich keine Proxying auf dem Apache-Backend für example.com zu verwenden.

+0

Andere Unterdomäne = andere Domäne –

+0

Ja. Aber example.com ist die übergeordnete Domäne für api.example.com, daher sollte die Beziehung zwischen diesen URLs parent - child und nicht child sein. – Baversjo

Antwort

4

Sie können auch JSONP verwenden, indem Sie Callback =? bis zum Ende der URL. jQuery weiß bereits, wie mit diesen Anforderungen umzugehen ist, aber es sind einige Änderungen auf der Serverseite erforderlich, um den Callback-Parameter zu behandeln.

0

Soweit ich weiß, können Sie nicht AJAX Cross-Domain tun.

Why is cross-domain Ajax a security concern?

Obwohl ich denke, könnte man ein iFrame Abhilfe

Cross Sub Domain Javascript

+2

aber es ist nicht Cross-Domain! – Baversjo

+0

Ich denke, Sie könnten eine IFRAME Workaround http://www.tomhoppe.com/index.php/2008/03/cross-sub-domain-javascript-ajax-iframe-etc/ – SAGExSDX

+1

Nach der gleichen Herkunft Politik Es ist eine andere Domäne: http://en.wikipedia.org/wiki/Same_origin_policy – wsanville

0

AJAX-Request auf der gleichen Domain wird nur unterstützt, tun. Sie können jedoch einen HTTP-Proxy in Ihrer bevorzugten Skriptsprache schreiben und Aufrufe an diesen HTTP-Proxy vornehmen. Sie können diese kleine tutorial auf einem AJAX-Proxy in PHP geschrieben überprüfen.

+0

Die Verwendung von Proxy ist keine gute Lösung für High-Scale-Anwendungen. –

-1

Verwenden Sie document.domain, um die Domäne zu der Domäne der obersten Ebene anstelle der Subdomäne zu machen.

document.domain="example.com" 

Dies ist described in detail auf MDN.

+0

Es ist bereits auf die Top-Level-Domain wie oben beschrieben gesetzt – Baversjo

+3

document.domain funktioniert nur für Iframes, nicht Ajax-Anfragen – Nathan

0

versuchen, Ihre Domäne in Ihrer Sub-Domain zu ändern, wie diese

<script type="text/javascript">  
    document.domain = 'example.com'; 
</script> 

wenn nicht funktioniert, auch Ihre document.domain in Ihrer Domain-Seite ändern.