1 votes

php array in url from json

Voici ce que je veux faire :

J'ai un fichier json comme ceci

  var foo = {
   format:"json",
   type:"test",
   id:"26443"
  };

et je veux mettre cela dans une url comme ceci

 'http://example.com/a:3:{s:6:"format";s:4:"json";s:4:"type";s:4:"test";s:2:"id";s:5:"26443";}'

que je mettrai ensuite dans un appel ajax, mais tout ce que j'ai essayé a pour résultat l'erreur 501 BAD URI. Quelqu'un pourrait-il me dire comment faire ?

J'ai essayé ceci EDITAR:

après avoir regardé à nouveau et alerté les résultats de cette fonction, elle construit les résultats correctement, mais ils ne sont pas utilisés de manière plus efficace, que ce soit par ajax ou par le navigateur.

 function js_array_to_php_array(a) {
  var a_php = "";
  var total = 3;

  for (var key in a){
   total;
   a_php = a_php + "s:" + String(key).length  + ":\""  + String(key) + "\";s:" + String(a[key]).length  +  ":\"" + String(a[key])  + "\";";
  }
  a_php = "a:" + total +":{" + a_php + "}";
  return a_php;
 }

Quand j'utilise http fox, j'obtiens ce résultat

 http://example.com/a:3:%7Bs:6:%22format%22;s:4:%22json%22;s:4:%22type%22;s:4:%test%22;s:2:%22id%22;s:5:%2226443%22;}

ce que je trouve étrange parce qu'il écode tout sauf le dernier crochet curly

2voto

Matt Ball Points 165937

Il existe déjà une fonction jQuery pour cela ! Utilisez-la et appréciez-la.

http://api.jquery.com/jQuery.param/

1voto

John Conde Points 102874

Pourquoi ne pas simplement utiliser une chaîne de requête "normale" ?

http://example.com/?type=test&id=26443

$type = $_GET['type'];
$id   = $_GET['id'];

À moins que je ne manque quelque chose ?

1voto

mcgrailm Points 9453

Donc il s'avère qu'il n'y a pas de problème avec la fonction js_array_to_php_array elle a fait exactement ce dont j'avais besoin le problème était que j'avais besoin d'utiliser JSONP au lieu de JSON lors de l'exécution de mon appel ajax car j'étais un domaine croisé ce qui explique aussi pourquoi le code a fonctionné dans l'url mais pas lorsque j'ai exécuté ajax

merci à tous pour votre aide

0voto

bobince Points 270740
http://example.com/a:3:{s:6:"format";s:4:"json";s:4:"type";s:5:"test";s:2:"id";s:5:"26443";}

501 a raison - ce n'est pas une URL valide. Les URL ne peuvent absolument pas contenir de guillemets, ni (pour la plupart) de crochets.

Si vous devez vraiment soumettre une structure littérale PHP dans une URL sans le faire comme un ensemble normal de paramètres de requête, vous devrez coder les caractères invalides dans l'URL, ce que vous pouvez faire comme suit :

url= 'http://example.com/'+encodeURI(js_array_to_php_array(foo));

résultant en :

http://example.com/a:3:%7Bs:6:%22format%22;s:4:%22json%22;s:4:%22type%22;s:5:%22test%22;s:2:%22id%22;s:5:%2226443%22;%7D

accessoirement ceci :

String(key)

est superflu : les clés des objets sont toujours des chaînes de caractères en JS, même si vous les placez sous forme de chiffres ;

"\""  + String(a[key]) + "\""

va se tromper si la valeur peut contenir une citation ou une barre oblique inversée, et

total;

il devrait sûrement y avoir un incrément ici ?

0voto

Joey Adams Points 13049

Du côté de PHP, vous pouvez utiliser urlencode(json_encode($obj)) pour convertir un objet en une chaîne de caractères qui peut être utilisée dans une URL.

Après avoir posté ceci, j'ai réalisé que vous essayez de convertir une variable JavaScript en une chaîne URL après avoir vu var foo = { . Duh.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X