Вот что я хочу сделать:
У меня есть такой 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:
после того, как он снова посмотрел и предупредил результаты этой функции, он строит результаты правильно, они просто не используют прокси-сервер либо 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;}
который я нахожу странным, потому что он уничтожает все, кроме последней фигурной скобки
Почему бы просто не использовать «нормальную» строку запроса?
http://example.com/?type=test&id=26443 $type = $_GET['type']; $id = $_GET['id'];
Разве я что-то не хватает?
Для этого уже есть функция jQuery! Используйте его и любите.
так что, оказывается, нет ничего плохого в функции js_array_to_php_array, которая была выполнена именно так, как мне было нужно, чтобы проблема заключалась в том, что мне нужно было использовать JSONP вместо JSON при запуске моего вызова ajax, поскольку я шел через перекрестный домен, который также объясняет, почему код работал в URL, но не тогда, когда я запускал ajax
Спасибо за вашу помощь
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;
здесь, конечно, должен быть прирост?
В конце PHP вы можете использовать urlencode(json_encode($obj))
для преобразования объекта в строку, которая может использоваться в URL-адресе.
После того, как я опубликовал это, я понял, что вы пытаетесь преобразовать переменную JavaScript в строку URL после того, как я увидел var foo = {
. Duh.