Как правильно вернуть json в IE8 из PHP-скрипта ajax - PullRequest
2 голосов
/ 12 ноября 2010

Я использую этот скрипт для загрузки ajax-файлов, и все хорошо работает в Firefox http://valums.com/ajax-upload/

Но он не работает в IE8.

РЕДАКТИРОВАТЬ: Хорошо, я сузил проблему.В своем ответе php ajax я делаю это

$result['table_1']='<b>text</b>';
echo json_encode($result);

Результат, который я вижу в инструментах разработчика IE, выглядит следующим образом:

JOURNAL : [uploader] innerHTML = {"table_1":"<B>text&lt;\/b&gt;"}</B>

Конец внутреннего html испорчен, иjson испортил правильный конечный тег, который каким-то образом оказался за пределами json ??

Я использую php 5.2

Ответы [ 3 ]

2 голосов
/ 12 ноября 2010

Вы должны попытаться проверить свой ответ JSON с помощью JSONLint . С другой стороны, если у вас PHP> = 5.3.0, вы можете использовать json_last_error(), чтобы проверить, что приводит к сбою PHP в процессе кодирования.

1 голос
/ 30 апреля 2013

У меня была похожая проблема Invalid JSON: {"text":"<H2>Update Complete&lt;\/H2&gt;"}</H2> с ie и я решил ее с помощью http://www.captain.at/howto-php-urlencode-javascript-decodeURIComponent.php (этот сайт больше не программирует, я нашел похожую функцию здесь Что является эквивалентом JavaScript encodeURIcomponent в PHP? ) на стороне PHP

$response->text .= encodeURIComponent("<H2 class='action_result'>Update Complete.</H2>");
return json_encode($response);      

и в JS я использовал

function showResponse(responseText, statusText, xhr, $form)  {
var response = jQuery.parseJSON (responseText);
$('#ajax_form_response')[0].innerHTML = decodeURIComponent(response.text);
}
0 голосов
/ 16 ноября 2010

Хорошо, я нашел решение, которое работает.Эта библиотека работает через iframe, поэтому для возврата текста типа

$result='<b id="1">text</b>';

мне нужно вручную кодировать и декодировать "себя", потому что они запутались в iframe. Таким образом, конечный php выглядит так

$result['table_1']=htmlentities(str_replace('"','|',getRowHTML()));
echo json_encode($result);

А потом вручную декодировать в javascript выглядит так:

   function(id, fileName, responseJSON)
    {
      $('#table_1 tbody').html
      (
         //this line decodes responseJSON.table_1
         $("<div/>").html(responseJSON.table_1.replace(/\|/g,'"')).text()
      );
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...