PHP массив в URL от JSON - PullRequest
       15

PHP массив в URL от JSON

1 голос
/ 12 апреля 2010

Вот что я хочу сделать:

У меня есть такой JSON

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

и я хочу поместить это в URL-адрес вот так

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

, который я затем вставлю в вызов ajax, но все, что я пробовал, приводит к ошибке 501 BAD URI, кто-то может сказать мне, как это сделать

Я пробовал это EDIT:

после повторного просмотра и оповещения о результатах этой функции он выдает результаты правильно, они просто не используются propler ни ajax, ни браузером

 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;
 }

когда я использую http fox, это возвращается

 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;}

, что я нахожу странным, потому что оно перекроет все, кроме последней фигурной скобки

Ответы [ 5 ]

2 голосов
/ 12 апреля 2010

Для этого уже есть функция jQuery! Используйте это и любите это.

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

2 голосов
/ 12 апреля 2010

Почему бы просто не использовать "обычную" строку запроса?

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

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

Если я что-то упустил?

1 голос
/ 13 апреля 2010

так что, как оказалось, нет ничего плохого в том, что функция js_array_to_php_array работала именно так, как мне было нужно, поэтому проблема заключалась в том, что мне нужно было использовать JSONP вместо JSON при выполнении моего вызова ajax, поскольку я собирался в междоменную область, что также объясняет почему код работал в URL, а не когда я запускал ajax

спасибо всем за помощь

0 голосов
/ 12 апреля 2010

На стороне PHP вы можете использовать urlencode(json_encode($obj)) для преобразования объекта в строку, которую можно использовать в URL.

После того как я опубликовал это, я понял, что вы пытаетесь преобразовать переменную JavaScript в строку URL после того, как я увидел var foo = {. Duh.

0 голосов
/ 12 апреля 2010
http://example.com/a:3:{s:6:"format";s:4:"json";s:4:"type";s:5:"test";s:2:"id";s:5:"26443";}

501 верно - это недействительный URL. URL-адреса определенно не могут содержать кавычки или (по большей части) фигурные скобки.

Если вам действительно необходимо передать буквенную структуру PHP в URL, не выполняя ее как обычный набор параметров запроса, вам придется кодировать URL недопустимыми символами, что вы можете сделать так:

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

в результате:

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

кстати это:

String(key)

является лишним: ключи объектов всегда являются строками в JS, даже если вы вводите их как числа;

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

пойдет не так, если значение может содержать кавычку или обратную косую черту, а

total;

здесь наверняка должно быть приращение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...