2009-04-26 8 views
9

J'ai essayé de faire une requête ajax à un serveur externe. J'ai appris jusqu'ici que j'ai besoin d'utiliser getJSON pour cela pour des raisons de sécurité?Jquery getJSON à la page PHP externe

Maintenant, je ne peux pas sembler faire un simple appel à une page externe. J'ai essayé de le simplifier autant que possible, mais ça ne marche toujours pas. J'ai 2 fichiers, test.html & test.php

mon test.html fait un appel comme celui-ci, à localhost pour le test:

$.getJSON("http://localhost/OutVoice/services/test.php", function(json){ 
    alert("JSON Data: " + json); 
}); 

et je veux que mon test.php pour revenir d'un simple 'test':

$results = "test"; 
echo json_encode($results); 

Je suis probablement faire une incroyable erreur de débutant, mais je n'arrive pas à comprendre. En outre, si cela fonctionne, comment puis-je envoyer des données à ma page test.php, comme vous le feriez comme test.php? Id = 15?


La page test.html appelle la page test.php sur localhost, même répertoire Je ne reçois pas d'erreur, tout simplement pas alerte ..

+0

Quelle est la page qui fait la demande. Je veux m'assurer que vous n'avez pas de problème de sécurité inter-domaines. – bendewey

+0

recevez-vous des erreurs? – SilentGhost

+0

La page test.html appelle la page test.php sur localhost, même répertoire Je ne reçois pas d'erreur, tout simplement pas d'alerte .. – Pmarcoen

Répondre

16

Il pourrait être que vous havre de paix 't a un rappel dans test.php. , json_encode accepte seulement aussi un tableau:

$results = array("key" => "value"); 
echo $_GET['callback'] . '(' . json_encode($results) . ')'; 
// the callback stuff is only needed if you're requesting from different domains 

jQuery passe automatiquement à JSONP (à savoir l'aide de balises script au lieu de XMLHttpRequest) lorsque vous utilisez http://. Si vous avez test.html et test.php sur le même domaine, essayez d'utiliser des chemins relatifs (et pas de callbacks).

+1

+1. Je suis sur le point d'implémenter des rappels côté serveur, mais si je choisis d'héberger le client et le serveur sur le même domaine, est-ce que j'utiliserai encore un callback pour le casser? (Je serai probablement capable de répondre à ma propre question dans environ une heure environ ...) – opyate

+0

Un rappel fonctionnera toujours, même si vous demandez le fichier du même domaine. Il est également prouvé qu'il est plus rapide d'utiliser un rappel JSON que de demander et d'évaluer l'objet (puisque eval est si lent). L'équipe de Yahoo Flickr a écrit à ce sujet il y a quelques mois: http://code.flickr.com/blog/2009/03/18/building-fast-client-side-searches/ – moff

+2

Cela vous ouvre totalement à une vénérabilité XSS - http: // www.metaltoad.com/blog/using-jsonp-safely – kajo

2

La solution la plus simple serait d'ajouter le code ci-dessous avant toute sortie dans votre fichier test.php, alors vous avez plus de flexibilité avec les méthodes que vous utilisez, un appel ajax standard devrait fonctionner. Toutefois, utilisez la fonction de rappel json lorsque vous recevez des données d'un serveur indépendant de votre volonté.

+0

+1, mais vous devriez vraiment le restreindre au (x) serveur (s) que vous demandez. En outre, la prise en charge d'IE pour ce problème est retardée, donc si vous avez besoin du support du navigateur, mieux vaut utiliser la méthode JSONP. –