json_encode不使用html字符串作为值
我现在正在调试这个ajax很长一段时间。 我在我的jQUery文件中有这个:
$("#typeForm").ajaxForm({ success : function(html){ alert(html); }).submit();
这会调用service.php ,在其中我有这个:
$data = array('upload_data' => $this->upload->data()); $str = "Nachricht empfangen!"; echo json_encode(array('file_name' => $data['upload_data']['file_name'], 'prompt' => $str));
这不行。 但是将$str
替换$str
$str = "HELLO WORLD";
jQuery警告我应该期待什么。 什么似乎是问题?
编辑:
这是输出的屏幕:
它会发出警报,但如果我将jQuery修改为:
$("#typeForm").ajaxForm({ success : function(html){ var obj = $.parseJSON(html); alert(obj); }).submit();
然后它什么都不做,甚至提醒。
我在json_encode
上做了一个var_dump,这里是转储,它看起来像一个格式错误的JSON:
string(214) "{"file_name":"cde595988d386529909ce5a8fe3a6d6f.png","prompt":"Nachricht empfangen!<\/span><\/div>"}"
以下是service.php的完整内容
class Service extends CI_Controller { public function __construct() { parent::__construct(); } public function index() { $filename = 'uploadfile'; $config['upload_path'] = './uploads/temp'; $config['allowed_types'] = 'jpg|png|gif|doc|docx|pdf|ppt|pptx|xls|xlsx|bmp'; $config['max_size'] = '3072'; $config['encrypt_name'] = TRUE; $config['remove_spaces'] = TRUE; $this->load->library('upload', $config); if (!$this->upload->do_upload($filename)) { $error = array('error' => $this->upload->display_errors()); echo json_encode(array('error' => $error['error'])); } else { $data = array('upload_data' => $this->upload->data()); $file_name = $data['upload_data']['file_name']; //print_r($data); //echo json_encode(array('test' => "Hello World")); $str = "Nachricht empfangen!"; $str2 = json_encode(array("file_name" => $file_name, "prompt" => $str)); //var_dump($str2); exit(json_encode(array('file_name' => $data['upload_data']['file_name'], 'prompt' => $str))); } } }
今天我和json_encode
有同样的问题。 但经过大量测试后,我找到了正确的解决方案:
在php中编码数组或字符串:
PHP: json_encode(ARRAY, JSON_HEX_QUOT | JSON_HEX_TAG);
在javascript中解码相同:
JS: var d = $.parseJSON(content);
尝试一些东西:
ajaxForm支持dataType参数,如果你期望来自服务器的dataType: json
像这样使用dataType: json
$("#typeForm").ajaxForm({ success : function(html){ // html here is already automatically a json object alert(html.prompt); }, dataType: 'json' }).submit();
你能发布完整的service.php吗? 或者尝试以下方法:
exit(json_encode(array(’file_name’=> $ data [‘upload_data’] [‘file_name’],’prompt’=> $ str)));
– 编辑 –
不知道为什么json_encode会返回如此奇怪的字符串:s, json_encode
是标准的php库还是外部库? 我问这个是因为有些服务器在他们的php安装中没有json_encode …我在我的本地测试并使用php内部json_encode它工作正常:
Nachricht empfangen!
如果找不到更好的解决方案,可以将值编码为base64编码:
$data = array('upload_data' => $this->upload->data()); $str = base64_encode("Nachricht empfangen!"); echo json_encode(array('file_name' => $data['upload_data']['file_name'], 'prompt' => $str));
并且在客户端解码它,IMO这更安全,如果您正在处理来自不同语言的字符,这也更适用。
也:
确保在json字符串调用exit上不会添加其他字符; 作家打印后。
看起来你需要逃避服务器端的报价。 由于它们在那里,它似乎创建了一个无效的JSON字符串。
string(214) "{"file_name":"cde595988d386529909ce5a8fe3a6d6f.png","prompt":"Nachricht empfangen!<\/span><\/div>"}"
这似乎被打破了,因为没有引用逃脱。 当找到一个未转义的“,它会破坏你期望的JSON结构。转义”应该是\“,单引号带\’等等。