AJAX voert niet uit op subdomain

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hello again!

Ik heb met mn modrewrite subdomains aangemaakt.
Nu probeer ik vanaf dat subdomein een reactie te plaatsen bij een nieuwsbericht(subdomain.domein.nl/nieuws)
Maar vanaf daar reageert mijn AJAX blijkbaar niet.. als ik op www.domein.nl/nieuws reageer echter wel.

Hoe kan ik dus mijn AJAX functions.js aanroepen als ik op een subdomain zit zodat het wel werkt?


Mn htaccess:
code:
1
2
3
4
5
6
7
8
9
10
11
RewriteCond %{HTTP_HOST} !^www\.xxx\.nl?$
RewriteCond %{HTTP_HOST} ^([^.]+)\.xxx\.nl?$
RewriteRule ^$ /index.php?subdomain=%1 [L]

RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
RewriteCond %{REQUEST_FILENAME} -d [NC]
RewriteRule ^(.*?)$ $1 [L]
RewriteRule ^(.*)/(.*)/(.*)/(.*) index.php?page=$1&page2=$2&page3=$3&page4=$4 [L]
RewriteRule ^(.*)/(.*)/(.*) index.php?page=$1&page2=$2&page3=$3 [L]
RewriteRule ^(.*)/(.*) index.php?page=$1&page2=$2 [L]
RewriteRule ^(.*) index.php?page=$1 [L]


en de ajax functie aanroep
code:
1
2
3
<script src="jscripts/jquery.js" type="text/javascript"></script>
<script src="jscripts/livequery.js" type="text/javascript"></script>
<script src="jscripts/jquery_functions.js" type="text/javascript"></script>


jquery_functions.js:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$("#reactieClick").click(function(event) {
    var bericht = $("#react").val();
    var newsID = $("#nieuwsID").val();

    $.ajax({
    type: "POST",
    url: "http://www.x.nl//includes/reacties.php?page2="+newsID,
    data: "bericht="+bericht+"&newsID="+newsID,
    success: function(msg){
        result = msg;
        $("#toonreacties").append(result);
        $("#react").val('');
        $(".kliko:last").show("fast");
    }
    });
return false;
});

[ Voor 0% gewijzigd door Verwijderd op 28-05-2009 21:48 . Reden: Domainnaam er uit gehaald ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Ik zou fatsoenlijke subdomeinen aanmaken.

Wellicht dat nu de functie niet wordt uitgevoerd door beveiligingsbeperkingen. Wat zegt Firebug? Krijg je foutmeldingen?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mn firebug zegt niets...
Hij wil mn click al niet eens uitvoeren(Omdat in de functions.js wordt geluisterd naar die click)

Wat is er verder mis met mn subdomeinen trouwens?

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Ik zou subdomeinen maken middels je adminstratiepanel (plesk, directadmin, webmin o.i.d.). Ik weet er het fijne niet van, maar volgens mij is dat gewoonweg een betere manier. Zit je ook niet met het gedoe dat bepaalde files niet worden gerewrited etc.

Firebug zegt niks? Wordt de js uberhaupt wel ingeladen?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De .js wordt dus niet ingeladen idd, vandaar mijn vraag uit eerste post "Hoe kan ik dus mijn AJAX functions.js aanroepen als ik op een subdomain zit zodat het wel werkt?"

En die subdomains moeten dynamisch zijn, want het zijn usernames etc... het zijn dus "fictieve" subdomains.

Acties:
  • 0 Henk 'm!

Verwijderd

Kan je je JS wel openen als je met je browser direct naar http://blaat.domein.nl/jscripts/jquery.js gaat?

edit:

Ja, blijkbaar :-)


edit:

op verzoek echte domeinnaam verwijderd

[ Voor 34% gewijzigd door Verwijderd op 28-05-2009 22:20 . Reden: even op m'n eigen linkje geklikt ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 28 mei 2009 @ 21:44:
Kan je je JS wel openen als je met je browser direct naar http://blaat.xxx.nl/jscripts/jquery.js gaat?
Ja :-)
edit: zou je effe domein naam uit je comment willen halen, hackattempts mogen later :p)

[ Voor 18% gewijzigd door Verwijderd op 28-05-2009 21:49 ]


Acties:
  • 0 Henk 'm!

  • Brinky.nl
  • Registratie: Maart 2005
  • Laatst online: 19-10-2024
En als je javascript files als volg aanroept:
<script src="http://www.domain.com/jscripts/jquery.js" type="text/javascript"></script>

Dus een directe verwijzing naar het hoofd domein.

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Brinky.nl schreef op donderdag 28 mei 2009 @ 21:46:
En als je javascript files als volg aanroept:
<script src="http://www.domain.com/jscripts/jquery.js" type="text/javascript"></script>

Dus een directe verwijzing naar het hoofd domein.
Idd, dat dus. Of wellicht base href gebruiken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Directe link al geprobeerd, wil niet.... Heb al een basehref, en die wil ook niet.

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op donderdag 28 mei 2009 @ 21:48:
Directe link al geprobeerd, wil niet.... Heb al een basehref, en die wil ook niet.
Wat krijg je dan? Kan hij hem dan ook niet vinden?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als ik dat doe werkt de click nog steeds niet. Dus ik vermoed dat ie 'm niet vind..
overigens vertelde iemand op phpfreakz me het volgende:
Je kunt met AJAX geen bestand opvragen van een ander domein dan waar je op werkt.

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op donderdag 28 mei 2009 @ 21:52:
Als ik dat doe werkt de click nog steeds niet. Dus ik vermoed dat ie 'm niet vind..
overigens vertelde iemand op phpfreakz me het volgende:


[...]
Vermoeden heb je niet zoveel aan. Vind hij hem nou wel of niet? Firefbug geeft echt veel info terug hoor. Ik zou nog maar eens kijken. Als het echt zo is dat hij hem niet mag uitvoeren (cross domain scripting), dan geeft Firebug of gewoon de javascript debugger een melding terug daarvan.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
edit:
Na wat geklooi krijg ik eindelijk een error uit mn FB:
Access to restricted URI denied" code: "1012
[Break on this error] (function(){var R=/((?:\((?:\([^()]+\)|[...(J,typeof K==="string"?K:K+"px")}})})();
jquery.js(Regel 19)


Aangezien mijn jquery allemaal op 1 lijn staat is dat dus zoeken naar een naald in een hooiberg.. Kent iemand deze error wellicht?

[ Voor 89% gewijzigd door Verwijderd op 28-05-2009 22:09 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Tja ik kan er zo weinig mee. "zucht" is trouwens ook niet nodig, ik probeer te helpen hoor.

Misschien heeft het iets te maken met een beveiligingsbeperking. Ik vermoed van wel, maar als je geen relevante foutmeldingen hebt, dan zou ik het ook niet weten. Je zou even kunnen testen door gebruik te maken van JSON. Als het goed is, kun je daar wel mee werken over verschillende domeinen. Zie bv: http://www.nabble.com/cro...ost-td16344729s27240.html
Verwijderd schreef op donderdag 28 mei 2009 @ 21:56:
edit:
Na wat geklooi krijg ik eindelijk een error uit mn FB:
Access to restricted URI denied" code: "1012
... Kent iemand deze error wellicht?
Google "Access to restricted URI denied" - > [JS] XMLHttpRequest geeft 'Access Denied' op subdomain

[ Voor 29% gewijzigd door Noork op 28-05-2009 22:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Okay, chillax... Dus de beste 'workaround' is om die callback van JSON toe te voegen lijkt me(Gezien die ook op advies van jquery zelf komt)

Nu rest mij echter de vraag waar ik deze callback toevoegen moet...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Any1?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 19:17

crisp

Devver

Pixelated

--> Webdesign, Markup & Clientside Scripting

verder, als je een pagina opvraagd op foo.domain.com dan kan je via Ajax ook alleen communiceren met foo.domain.com en niet met domain.com, bar.domain.com of woei.foo.domain.com - dat is een security feature en is by design*. Je zal dus moeten zorgen dat je serverside component (ook) via de subdomainen beschikbaar is.

* in de toekomst komen er wel mogelijkheden tot crossdomain XHR, IE8 heeft het zelfs al (een proprietary implementatie)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Tot die tijd kun je bijvoorbeeld JSONP gebruiken.

edit: ow dat zei je zelf ook al. JSON + callback = JSONP

Waar je die callback toe moet voegen staat overigens gewoon in de jQuery handleiding.

[ Voor 92% gewijzigd door Bosmonster op 29-05-2009 10:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Die uit de handleiding snap ik niet hoe ik die toepassen moet op bovenstaande function.. heb 't een en ander geprobeerd maar kreeg 't niet voor elkaar..

care to make an example?

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Wat lukt je nou precies niet? Kun je je functions.js niet inladen of uitvoeren, of krijgt je een fout bij een aktie vanuit functions.js?

Javascript libraries kun je gewoon van elk willekeurig domein inladen (denk maar eens aan de Google Analystics tracker), dus daar zal het probleem niet liggen. Zelf gebruiken wij altijd een static subdomain om statische content (zoals javascripts, maar ook images) op te zetten zodat de efficienter kunnen worden geserveerd door de webserver.

Ook de functions uit het javascript dat je van een 'vreemd' domain hebt geladen kun je gewoon uitvoeren. Echter requests via XHR zijn gebonden tot het sub domein waar de bezoeker zich bevind. Dus vanaf het www subdomein kan ik niet nieuws.html van het static subdomein inlezen. Dan krijg je een access denied.

Wat betreft je fout in jquery. Ik zou eens beginnen om de laatste versie opnieuw op je server te zetten. Eventueel tijdens development zelfs de uncompressed versie zodat je via firebug of zo door de code kunt steppen en dus beter kunt debuggen.

Maar zoals je aangeeft is het subdomain slechts de username van de gebruiker, dan kun je toch ook gewoon nieuws.php inladen vanaf het subdomain van de bezoeker? Je moet dan mogelijk wel je rewriterule aanpassen. Waarom heb je eigenlijk deze rewrite rule? Is het niet gewoon gemakkelijk op basis van de headers te bepalen op welke subdomain je zit?

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Niemand_Anders:
Ik kan

RewriteCond %{HTTP_HOST} !^www\.xx\.nl?$
RewriteCond %{HTTP_HOST} ^([^.]+)\.xx\.nl?$
RewriteRule ^$ /index.php?subdomain=%1 [L]

Dus gewoon weglaten? Of moet het aangepast worden?
Ik ben servertechnisch niet zo scherp, dus een flinke duw in de goede richting zou ik wel op prijs stellen

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Verwijderd schreef op vrijdag 29 mei 2009 @ 10:19:
Die uit de handleiding snap ik niet hoe ik die toepassen moet op bovenstaande function.. heb 't een en ander geprobeerd maar kreeg 't niet voor elkaar..

care to make an example?
Een voorbeeld staat op de eerste link in mn post (die link gaat naar een pagina van de uitvinder van JSONP). Het idee van JSONP is dat je je JSON code wrapt in een callback-functie (die moet je dus serverside zelf toevoegen, al zijn hier voor de meeste serverside talen ook wel prima tools voor). Deze functie wordt weer aangeroepen door jQuery. Om dit goed te laten verlopen moet je uiteraard die callbackfunctie meegeven met de request en daar is dus die ? voor in de jQuery aanroep. Die genereert een random functienaam die je serverside dus kunt gebruiken om je JSON code in te wrappen.

In je jQuery callback krijg je vervolgens het resultaat van die functie (een JS-object dus) terug. En doordat deze code gewoon als script-tag wordt geinjecteerd in je code heb je geen xdomain-issues.

Als je meer wilt weten over implementatie, Google dan gewoon even op JSONP.

[ Voor 9% gewijzigd door Bosmonster op 29-05-2009 10:55 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja, maar waar moet ik die callback nou toevoegen? Moet ik een apart scriptje maken in mijn code, moet ik dat in de jquery_functions.js doen, moet ik een callback naar mijn .js doen, of naar mijn basis link... vragen vragen :p

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Verwijderd schreef op vrijdag 29 mei 2009 @ 10:56:
Ja, maar waar moet ik die callback nou toevoegen? Moet ik een apart scriptje maken in mijn code, moet ik dat in de jquery_functions.js doen, moet ik een callback naar mijn .js doen, of naar mijn basis link... vragen vragen :p
In je TS heb je het over AJAX, JSON is een vervanging voor AJAX, niet voor het inladen van externe scripts. Externe scripts zou je sowieso zonder problemen moeten kunnen injecteren xdomain.

[ Voor 8% gewijzigd door Bosmonster op 29-05-2009 10:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Gezien het feit dat die jquery_functions.js dus een extern script is, zou deze dus moeten werken Xdomain.. begrijp ik je goed?

In dat geval heb ik dan toch een beetje een probleempje. Want dat doet ie dus niet :')

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op vrijdag 29 mei 2009 @ 13:58:
Gezien het feit dat die jquery_functions.js dus een extern script is, zou deze dus moeten werken Xdomain.. begrijp ik je goed?

In dat geval heb ik dan toch een beetje een probleempje. Want dat doet ie dus niet :')
Je wilt beweren dat een als onderstaande functie niet zou werken in een extern script? :')
code:
1
 function bla() { alert('hoi'); }

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Verwijderd schreef op vrijdag 29 mei 2009 @ 13:58:
Gezien het feit dat die jquery_functions.js dus een extern script is, zou deze dus moeten werken Xdomain.. begrijp ik je goed?

In dat geval heb ik dan toch een beetje een probleempje. Want dat doet ie dus niet :')
Ik zou niet weten waarom een javascript bestand niet zou werken. Wat ik me wel kan voorstellen is dat je AJAX call niet werkt, dat geeft ook die error die je aangaf als je dat x-domain probeert.

Vandaar ook de JSON oplossing.

Ik vrees dat dit een beetje klok/klepel verhaal begint te worden..

[ Voor 5% gewijzigd door Bosmonster op 29-05-2009 14:31 ]


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Verwijderd schreef op vrijdag 29 mei 2009 @ 10:28:
@Niemand_Anders:
Ik kan

RewriteCond %{HTTP_HOST} !^www\.xx\.nl?$
RewriteCond %{HTTP_HOST} ^([^.]+)\.xx\.nl?$
RewriteRule ^$ /index.php?subdomain=%1 [L]

Dus gewoon weglaten? Of moet het aangepast worden?
Ik ben servertechnisch niet zo scherp, dus een flinke duw in de goede richting zou ik wel op prijs stellen
Ik doe al een eeuwigheid niets meer met PHP, maar volgens mij krijg je middels $_SERVER['HTTP_HOST'] de hostname waarop het script draait terug. Aangezien je alles vanuit index.php regelt kun je dus simpel controleren of je op 'www' zit of op een ander subdomein. Als je daarna vervolgens consequent overal de http_host gebruikt vraag je dus alles (ook de ajax/json request) op vanaf dezelfde host en heb je in elk geval niet meer te maken met cross domain scripting.

Dat zal de zaak een stuk vereenvoudigen. Maar plaats eens de 'bla functie van Noork in je functions.js en roep die eens aan. Wat gebeurt er dan. Krijg je dan wel of niet de alert melding?

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
edit:
Fixed...

Door alles aan te roepen(de js-jes) vanaf de subdomain(subdomain.bla.nl/scripts/function.js) en in de function zelf de url te veranderen in ./includes/bllaaaa

Mag ik jullie enorm bedanken voor jullie engelengeduld? :-)

[ Voor 180% gewijzigd door Verwijderd op 29-05-2009 16:26 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Verwijderd schreef op vrijdag 29 mei 2009 @ 16:18:
bla is not defined
[Break on this error] bla();

:')

overigens werk ik nu wel met die HTTP_HOST... dus alle scripts worden vanaf dat domain aangeroepen...
Dan krijg ik nog steeds:
Access to restricted URI denied" code: "1012


aanroep nu:
code:
1
2
3
<script src="http://aaa.xxx.nl/jscripts/jquery.js" type="text/javascript"></script>
<script src="http://aaa.xxx.nl/jscripts/livequery.js" type="text/javascript"></script>
<script src="http://aaa.xxx.nl/jscripts/jquery_functions.js" type="text/javascript"></script>
Ondanks dat het al een aantal maal gezegd is, heb je blijkbaar nog steeds niet door dat dit je probleem niet is. Het includen van de scripts is geen probleem, het gaat om het uitvoeren van je ajax-call naar het andere (sub)domein....
Aangezien je alles vanuit index.php regelt kun je dus simpel controleren of je op 'www' zit of op een ander subdomein. Als je daarna vervolgens consequent overal de http_host gebruikt vraag je dus alles (ook de ajax/json request) op vanaf dezelfde host en heb je in elk geval niet meer te maken met cross domain scripting.
Sorry, dit is echt BS. Clientside blijven de domeinen anders, ongeacht hoe je je serverside rules hebt staan. Tenzij ik je post compleet niet snap. Maar eerlijk gezegd snap ik uberhaupt niet zo goed wat TS met die subdomeinen zit te kloten.

Als de subdomeinen toch maar fake zijn (zoals het er nu naar uit ziet) is er ook helemaal geen reden de verschillende scripts van een ander domein te halen, maar zou je ze vanaf ieder willekeurig domein kunnen aanroepen. Dan ben je wel van het xdomain issue af natuurlijk.

[ Voor 32% gewijzigd door Bosmonster op 29-05-2009 16:27 ]


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Kun je de javascript locatie wel via je browser adresbalk benaderen?
Ofwel kan de buitenwereld het javascript bestand wel lezen?
Wat zijn de permissies van het bestand? (zet hem eventueel anders naar de gebruikelijke '755')

Maak anders in /tmp even een test bestandje aan en kijk wie de eigenaar van het bestand is. Dit is echt een webserver issue en heeft zeer waarschijnlijk helemaal niets met javascript zelf te maken..

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Niemand_Anders schreef op vrijdag 29 mei 2009 @ 16:26:
Kun je de javascript locatie wel via je browser adresbalk benaderen?
Ofwel kan de buitenwereld het javascript bestand wel lezen?
Wat zijn de permissies van het bestand? (zet hem eventueel anders naar de gebruikelijke '755')

Maak anders in /tmp even een test bestandje aan en kijk wie de eigenaar van het bestand is. Dit is echt een webserver issue en heeft zeer waarschijnlijk helemaal niets met javascript zelf te maken..
execute rechten op een js-bestand lijkt me wat overkill, 644 lijkt me logischer, maar dat terzijde

Daarnaast is de enige lead die we hebben een javascript-error die voorkomt uit het feit dat hij een xdomain ajax call probeert uit te voeren. Wel bout om dan te stellen dat het probleem serverside ligt en niks met javascript te maken heeft :+

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Bosmonster schreef op vrijdag 29 mei 2009 @ 16:22:
Sorry, dit is echt BS. Clientside blijven de domeinen anders, ongeacht hoe je je serverside rules hebt staan. Tenzij ik je post compleet niet snap. Maar eerlijk gezegd snap ik uberhaupt niet zo goed wat TS met die subdomeinen zit te kloten.
Het probleem zou zijn dan hij vanaf xyz.domein.com een ajax call naar www.domain.com zou doen. Echter betreft het hier virtuele subdomeinen en als de rewrite rule verdwijnt kan de ajax call dus gewoon naar hetzelfde subdomein worden gedaan waardoor je geen cross domein request doet.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dames Dames, geen ruzie maken.. Lees m'n post hierboven :)

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Niemand_Anders schreef op vrijdag 29 mei 2009 @ 16:32:
[...]

Het probleem zou zijn dan hij vanaf xyz.domein.com een ajax call naar www.domain.com zou doen. Echter betreft het hier virtuele subdomeinen en als de rewrite rule verdwijnt kan de ajax call dus gewoon naar hetzelfde subdomein worden gedaan waardoor je geen cross domein request doet.
Ok, dan snap ik waar je heen wilt, zoals ik eerder ook al zie:
Als de subdomeinen toch maar fake zijn (zoals het er nu naar uit ziet) is er ook helemaal geen reden de verschillende scripts van een ander domein te halen, maar zou je ze vanaf ieder willekeurig domein kunnen aanroepen. Dan ben je wel van het xdomain issue af natuurlijk.
Is gezien de kennis van TS met betrekking tot javascript wel een betere route om te volgen waarschijnlijk.

edit: ah dat is blijkbaar ook de gelukte route :)

[ Voor 7% gewijzigd door Bosmonster op 29-05-2009 16:44 ]

Pagina: 1