Voici deux pages, test.php et testserver.php.
test.php
<script src="scripts/jq.js" type="text/javascript"></script>
<script>
$(function() {
$.ajax({url:"testserver.php",
success:function() {
alert("Success");
},
error:function() {
alert("Error");
},
dataType:"json",
type:"get"
}
)})
</script>
testserver.php
<?php
$arr = array("element1",
"element2",
array("element31","element32"));
$arr['name'] = "response";
echo json_encode($arr);
?>
Maintenant mon problème : lorsque ces deux fichiers sont sur le même serveur (soit localhost ou serveur web), cela fonctionne et alert("Success" ;)
est appelé ; S'ils sont sur des serveurs différents, c'est-à-dire testserver.php sur le serveur web et test.php sur localhost, cela ne fonctionne pas, et alert("Error" ;)
est exécuté. Même si l'URL dans ajax est changé en http://domain.com/path/to/file/testserver.php
Utilisez [JSONP][1].
jQuery :
$.ajax({
url:"testserver.php",
dataType: 'jsonp', // Notice! JSONP <-- P (lowercase)
success:function(json){
// do stuff with json (in this case an array)
alert("Success");
},
error:function(){
alert("Error");
}
});
PHP :
<?php
$arr = array("element1","element2",array("element31","element32"));
$arr['name'] = "response";
echo $_GET['callback']."(".json_encode($arr).");";
?>
L'écho est peut-être erroné, cela fait un moment que je n'ai pas utilisé php. Dans tous les cas, vous devez sortir callbackName('jsonString' ;)
en remarquant les guillemets. jQuery passera son propre nom de callback, vous devez donc le récupérer dans les paramètres GET.
Et comme Stefan Kendall l'a indiqué, [$.getJSON()][2] est une méthode raccourcie, mais vous devez alors ajouter 'callback=?'
à l'url comme paramètre GET (oui, la valeur est ?, jQuery la remplace par sa propre méthode de rappel générée).
[1] : http://en.wikipedia.org/wiki/JSONP [2] : http://api.jquery.com/jQuery.getJSON/
Vous devez jeter un coup d'œil à [Same Origin Policy][1] :
En informatique, la politique de la même origine est un concept de sécurité important pour un nombre de langages de programmation côté navigateur langages de programmation côté navigateur, tels que JavaScript. Le site politique autorise les scripts exécutés sur des pages provenant du même site. sur des pages provenant d'un même site. d'accéder aux méthodes et aux propriétés de l'autre. propriétés de l'autre sans restrictions spécifiques. spécifiques, mais empêche l'accès à la plupart des méthodes et propriétés entre pages de sites différents.
Pour que vous puissiez obtenir des données, il faut qu'elles le soient :
Même protocole et même hôte
Vous devez mettre en œuvre [JSONP][2] pour contourner ce problème.
[1] : http://en.wikipedia.org/wiki/Same_origin_policy [2] : http://remysharp.com/2007/10/08/what-is-jsonp
La sécurité des navigateurs empêche d'effectuer un appel ajax d'une page hébergée sur un domaine vers une page hébergée sur un autre domaine ; c'est ce qu'on appelle la " ;[same-origin policy][1]" ;.