LINUX.ORG.RU

Вопрос к php шникам


0

1

Возникла странная ситуация при переносе php скрипта с localhosta на виртуальный хостинг.
К php скрипту отправляются json данные.

$.ajax({
	type: 'POST',
	url: 'php-cgi/action.php',
	data: 'Se='+$.toJSON(jSon),
	success: function(res) { document.write(res); },
	error: function(XMLHttpRequest, textStatus, errorThrown) { alert('Client'); }
});

В ответ php скрипт отсылает чтото вроде этого:
$jso = json_decode($_POST['Se']);
print_r($jso);

На localhoste все в порядке:
stdClass Object ( [imena] => Array ( [0] => Вася ) [fam] => Array ( [0] => Пупкин )) 

А вот на виртуальном хостинге просто подвисает страница. Все остальное работает. Версии php 5.3.3 и 5.2.12, json 1.2 и 1.2 на localhoste и хостинге соответсвенно.


Может какие-нибудь magic quotes жизнь портят?

avol
()

Посмотрите в error_log - не исключено, что вывод ошибок подавляется и идёт только в лог.

Slavaz ★★★★★
()
Ответ на: комментарий от isden

to avol: вряд ли, json корректно сформирован javascriptoм, проверял. Да и тогда на localhoste тоже не работало бы.
to Slavaz: туда глянул первым делом, но там пусто, ничего относительно моего скрипта.
to isden: да хоть 'action.php', хоть 'php/work.php', ничего не меняет. Я папку просто так назвал в поддиректории.

nnmo
() автор топика

А вот на виртуальном хостинге просто подвисает страница.

как это подвисает? что в итоге доходит в $_POST? лучше записать по другому отправку, просто что бы данные правильно эскейпились:

data: { 'Se' : $.toJSON(jSon) },
rainy
()
Ответ на: комментарий от rainy

Действительно, не очень точно описал проблему.
В ответ на запрос приходит пустой ответ.
Firebug:

POST action.php  200 OK

Заголовки:
  Заголовок ответа:
  HTTP/1.1 200 OK
  Date: Wed, 27 Oct 2010 12:45:33 GMT
  Content-Type: text/html
  Transfer-Encoding: chunked
  Connection: keep-alive
  Keep-Alive: timeout=5
  Server: Apache
  Cache-Control: max-age=0
  Expires: Wed, 27 Oct 2010 12:45:33 GMT

  Заголовок запроса:
  POST php/action.php HTTP/1.1
  Host: zavodpromintech.ru
  User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.11)   Gecko/20101021 Gentoo Firefox/3.6.11
  Accept: */*
  Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
  Accept-Encoding: gzip,deflate
  Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
  Keep-Alive: 115
  Connection: keep-alive
  Content-Type: application/x-www-form-urlencoded; charset=UTF-8
  X-Requested-With: XMLHttpRequest
  Referer: http://zavodpromintech.ru/calc/index.html
  Content-Length: 179
  Pragma: no-cache
  Cache-Control: no-cache

POST:
  Параметры:
  Se	{"imena":["Вася"],"fam":["Пупкин"]}

Ответ: пусто

Если написать в php скрипте вот так:
$jso = $_POST['Se'];
print_r($jso);


то выдает:
{\"imena\":[\"Вася\"],\"fam\":[\"Пупкин\"]}

nnmo
() автор топика
Ответ на: комментарий от nnmo

Давно не работал с JSON, но возможно, дело в \«imena\», т.е. всякие там magic_quotes(они, кстати, deprecated).

И ещё: так лучше не делать.

data: 'Se='+$.toJSON(jSon),

Лучше:

data: {«param1» : value1, «param2»}

Также, есть специальный метод для сбора данных из формы.

Viglim
()

php просто делит на 0...

var_dump($_POST['Se']);
string(48) "{\"imena\":[\"Вася\"],\"pokrit\":[\"Пупкин\"]}" 
$string = json_decode("{\"imena\":[\"Вася\"],\"pokrit\":[\"Пупкин\"]}");
var_dump($string);
object(stdClass)#1 (2) { ["imena"]=> array(1) { [0]=> string(8) "Вася" } ["fam"]=> array(1) { [0]=> string(12) "Пупкин" } } 
$string = json_decode($_POST['Se']);
var_dump($string);
NULL


...как такое возможно???

nnmo
() автор топика
Ответ на: комментарий от nnmo

И всетаки все дело было в \ ...они были лишними. Непонятно только как на localhoste у меня все работало с \ ..
Тему можно считать закрытой.

nnmo
() автор топика
Ответ на: комментарий от nnmo

при парсинге исходного кода строковые литералы, заключенные в " ", просматриваются на предмет escape последовательностей, и они заменяются.
«\»" превращается в '«', поэтому ты не смог воссоздать проблему в примере выше

note173 ★★★★★
()
Ответ на: комментарий от note173

Я это знаю. " \" " у меня превращается в " " " если смотреть var_dump, а так это просто ".
Смысл в том что на виртуальном хостинге json_decod'у нужна последовательность вообще без escape символов, а на локалхосте json_decode съедает строку вместе с ними.

nnmo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.