我正在使用这个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<\/b>"}</B>
内部html的结束搞砸了,json搞砸了正确的结尾标签,不知何故在json之外结束了?
我正在使用php 5.2
答案 0 :(得分:2)
您应该尝试使用JSONLint验证您的JSON响应。另一方面,如果你有PHP&gt; = 5.3.0,你可以使用json_last_error()
来验证导致PHP在编码过程中失败的原因。
答案 1 :(得分:1)
我有一个类似的问题Invalid JSON: {"text":"<H2>Update Complete<\/H2>"}</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()
);
}