簡體   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