php - json_encode 不使用 html 字符串作为值

我调试这个 ajax 已经有一段时间了。我的 jQUery 文件中有这个:

$("#typeForm").ajaxForm({
    success : function(html){
        alert(html);
}).submit();

这调用 service.php,在其中我有这个:

$data = array('upload_data' => $this->upload->data());
$str = "<div style='position:relative'><img src='/assets/ui/success.png' /><span style='position:relative;top:-15px;'>Nachricht empfangen!</span></div>";
echo json_encode(array('file_name' => $data['upload_data']['file_name'], 'prompt' => $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":"<div style="position:relative;"><img src="\/assets\/ui\/success.png" \=""><span style="position:relative;top:-15px;">Nachricht empfangen!&lt;\/span&gt;&lt;\/div&gt;"}"
</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 = "<div style='position:relative;'><img src='/assets/ui/success.png' /><span style='position:relative;top:-15px;'>Nachricht empfangen!</span></div>";
            $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中对数组或字符串进行编码:

json_encode($array, JSON_HEX_QUOT | JSON_HEX_TAG);

在JS中解码相同:

var d = $.parseJSON(content);

https://stackoverflow.com/questions/9764598/

相关文章:

json - Spring Boot Actuator 端点的 pretty-print JSON

python - 避免 KeyError 的默认字典键

iphone - 从 NSArray 创建一个 json 字符串

python - json.dumps 打乱了顺序

json - 从 PostgreSQL 中的函数返回中删除双引号

python - 如何从一个文件中提取多个 JSON 对象?

json - 如何自定义来自 spring @Valid 验证的默认错误消息?

javascript - 如何在 console.log 中打印 JSON 数据?

python - 如果键可能不存在,则从 Python dict 读取

json - HTTPResponse 对象 -- JSON 对象必须是 str,而不是 'byte