繁体   English   中英

通过 ajax 向 controller 发送请求,从命名空间中删除斜杠?

[英]Sending request to the controller via ajax removing slashes from namespace?

onclick="loadInlineEditor({
                        class:'<?= get_class($content) ?>', 
                        model_id:<?= $content->id ?>,
                        attribute:'description'
                    })"

get_class($content)的 Output 应该是app\models\Page

但是在 controller 这个appmodelsPage是我如何通过将它作为 AJAX 请求发送回来的

AJAX 代码:-

function loadInlineEditor(data) {
        $.ajax({
                url: '<?= Url::toRoute(["//url"]) ?>',
                type: 'POST',
                data: data,
                dataType: 'json'
            })

Output 代码:-

Array
(
    [class] => appmodelsPage
    [model_id] => 1
    [attribute] => description
)

删除斜线的不是 ajax。 因为php生成的js代码是这样的:

loadInlineEditor({
    class:'app\models\Page', 
    model_id: 1,
    attribute:'description'
})

但是 JS 字符串中的\ (反斜杠)字符用作转义字符。 如果你想在 JS 字符串中使用反斜杠,你必须将它自己转义为\\

为此,您可以使用 addlashes addslashes() php function 或json_encode()

onclick="loadInlineEditor({
    class:'<?= addslashes(get_class($content)) ?>', 
    model_id:<?= $content->id ?>,
    attribute:'description'
})"

json_encode将在字符串周围添加" ,因此您也不必使用引号。

onclick="loadInlineEditor({
    class:<?= json_encode(get_class($content)) ?>, 
    model_id:<?= $content->id ?>,
    attribute:'description'
})"

因为 **** 是一个转义字符,所以你需要在将他存储在 class 属性之前对其进行转义。

所以你的代码变成:

onclick="loadInlineEditor({
                        class:'<?= addslashes(get_class($content)) ?>', 
                        model_id:<?= $content->id ?>,
                        attribute:'description'
                    })"

事实上,addslashes 将app\models\Page发送到 class 属性并保存到app\models\Page

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM