&引用;意外标识符“;试图用转义单引号解析JSON时Javascript出错
在我的Laravel应用程序中,我将JSON对象传递给Vue组件:&引用;意外标识符“;试图用转义单引号解析JSON时Javascript出错,javascript,php,json,laravel,vue.js,Javascript,Php,Json,Laravel,Vue.js,在我的Laravel应用程序中,我将JSON对象传递给Vue组件: <search v-bind:library="'{{ json_encode(language_library()) }}'"></search> 如您所见,字符串中的单引号被转义。但是,Vue会引发以下错误: [Vue warn]: Error compiling template: invalid expression: Unexpected identifier in
<search v-bind:library="'{{ json_encode(language_library()) }}'"></search>
如您所见,字符串中的单引号被转义。但是,Vue会引发以下错误:
[Vue warn]: Error compiling template:
invalid expression: Unexpected identifier in
'{"you_dont_have_subscription":"You don\\'t have an active subscription right now."}'
Raw expression: v-bind:library="'{"you_dont_have_subscription":"You don\\'t have an active subscription right now."}'"
我不明白为什么会发生这个问题。它是双引号中的一个单引号,并且也是转义的(在PHP后端使用addslashes()
)。如果不是这样的话,我怎么能有一个在JSON中包含引号的字符串呢
如果,我不使用AddSlaes,而是手动执行类似的操作
str_replace("'", "\'", $string)
…我仍然会遇到同样的错误,JSON中的引号前面有两个反斜杠。这是常见的错误。这与引用无关,双引号会导致此错误。为什么?请参阅您的输入以获取道具
v-bind:library="'{"you_dont_have_subscription":"You don\\'t have an active subscription right now."}'"
这意味着js不知道为什么library prop以v-bind:library=“”{“
结尾,所以使用引号代替dbl引号。如下所示:
<search :library='@json(language_library())'></search>
<search v-bind:library="{{ json_encode(language_library(), JSON_HEX_QUOT | JSON_HEX_APOS) }}"></search>
// or you could declare a variable and assign `json_encode` to it
<?php $json = json_encode(language_library(), JSON_HEX_QUOT | JSON_HEX_APOS); ?>
<search v-bind:library="{{ $json }}"></search>
您只需编写
搜索
标记,如下例所示:
<search v-bind:library="'{{ json_encode(language_library(), JSON_HEX_QUOT | JSON_HEX_APOS) }}'"></search>
- JSON\u HEX\u APOS:All'被转换为\u0027
- JSON\u HEX:All”被转换为\u0022
<option {{ $isSelected($value) ? 'selected="selected"' : '' }} value="{{ $value }}">
{{ $label }}
</option>
{{$label}}
因此,您的搜索标签将如下所示:
<search :library='@json(language_library())'></search>
<search v-bind:library="{{ json_encode(language_library(), JSON_HEX_QUOT | JSON_HEX_APOS) }}"></search>
// or you could declare a variable and assign `json_encode` to it
<?php $json = json_encode(language_library(), JSON_HEX_QUOT | JSON_HEX_APOS); ?>
<search v-bind:library="{{ $json }}"></search>
//或者,您可以声明一个变量并为其指定`json_encode`
试试看,可能会有用,我也会遇到同样的事情
我使用{!!$value!!}}
回答:你不需要额外的
'
说明:
记住json_encode
将返回{}
,laravel将在{{}}
中回显它,然后作为对象本身{}
传递并编译到javascript中
编辑:
使用额外的“
将被javascript视为结束字符串
您的编码示例
<search v-bind:library="{{ json_encode(language_library()) }}"></search>
我不明白你在说什么。什么不能逃避什么?你背反斜杠反斜杠单引号…它逃避了第二个反斜杠,而不是单引号…你有一个太背反斜杠了…也就是说,\'
逃避了第二个\
而不是'
(最后写出来:p-该死的反斜杠)这是PHP内置addslashes函数的输出…我不是手动添加斜杠。我不明白为什么它会添加两个斜杠而不是一个斜杠,如果这样会产生反效果?顺便说一句,如果我根本不使用addslashes,我会遇到同样的错误-然后只有一个没有斜杠的单引号。这是PHP内置addslashes函数的输出tion
-然后PHP addslashes函数不是生成SyntaxError所需的函数:在Blade中使用@JSON()指令在JSON中的位置1使用意外标记o
是一个好主意。但是,它需要一个常规PHP变量,因此语言库()
必须返回一个PHP数组,例如[“您没有订阅”=>”您现在没有活动订阅。“]
。我手头没有代码,但我强烈怀疑对包含json的字符串使用@json()
会对json进行重新编码,您现在可能不需要双重编码。但是语言库()
确实返回了一个常规数组,我确信这一点。现在的错误是避免使用JavaScript关键字作为属性名:“for”“
-即使JSON中没有属性的。有时会发生这种情况,因为您的对象可能包含编译为javascript结束字符串的”,请阅读我的回答,当我删除额外的,将原始刀片回显到您的javascript时,您不需要额外的”,我在位置1得到JSON中的意外标记o