如何从ajax php脚本正确地将json返回到IE8

时间:2010-11-12 15:14:06

标签: php ajax json internet-explorer

我正在使用这个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 个答案:

答案 0 :(得分:2)

您应该尝试使用JSONLint验证您的JSON响应。另一方面,如果你有PHP&gt; = 5.3.0,你可以使用json_last_error()来验证导致PHP在编码过程中失败的原因。

答案 1 :(得分:1)

我有一个类似的问题Invalid JSON: {"text":"<H2>Update Complete&lt;\/H2&gt;"}</H2>与ie并通过使用解决它 <击> http://www.captain.at/howto-php-urlencode-javascript-decodeURIComponent.php (该网站不再编程我在PHP端发现了类似的功能What is the equivalent of JavaScript's encodeURIcomponent in 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);
}

答案 2 :(得分:0)

好的,我找到了一个有效的解决方案。这个库通过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()
      );
    }