【问题标题】:Javascript params from string value来自字符串值的 Javascript 参数
【发布时间】:2019-05-31 17:38:55
【问题描述】:

我想根据字符串中的参数数组(来自php)为TagEditor(或任何其他具有参数的插件)插件设置动态参数,我以这种方式有一个div。

<textarea class="tag-editor" type="text" name="xxxx" data-attributes-js="{placeholder:'1,2,3,4',other_para,:true,....}"></textarea>

所以我想在 JS 中获取这些参数并返回它们的评估值,以便 tagEditor 使用这些动态参数。

var $input = $('.tag-editor');
$input.tagEditor( $input.attr("data-attributes-js") );

但这不起作用,我怎样才能使这个工作呢?

【问题讨论】:

  • 您需要使用 JSON.parse 将 data-attributes-json 的字符串值转换为 javascript 对象。但是,您的 json 格式不正确(属性名称/值周围缺少双引号)。
  • 这里重要的概念是serialization。您正在尝试使用 JSON 在 PHP 中 序列化 一些数据,然后在 JS 中 反序列化 它。您不一定需要使用标准的 PHP 序列化程序库……您完全可以使用它。只需确保您了解概念并使用正确的 JSON 格式即可。

标签: javascript jquery parameters


【解决方案1】:

您可以在这里更改一些内容,例如:-

$(function(){
  
  const $input = $('.tag-editor');
  const jsString = $input.attr("data-attributes-js");
  const jsObj = JSON.parse(jsString);
  
  console.log(jsObj);;
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea class="tag-editor" type="text" name="xxxx" data-attributes-js='{"placeholder":"1,2,3,4","other_para":true,"another_para":5}'></textarea>

【讨论】:

  • 不工作:Uncaught SyntaxError: Unexpected token s in JSON at position 0
  • 是您的属性,例如 - data-attributes-js='{"placeholder":"1,2,3,4","other_para":true,"another_para":5}'跨度>
【解决方案2】:

不确定您的 PHP 服务器有哪些功能,但一般来说:

  1. 创建一个真实的对象,然后将其字符串化
  2. 以 JSON 字符串形式发送
  3. 将 JSON 解析回对象
  4. 将对象传递给.tag-editor()

/* Server Back-end */
/* 
this is not code for server -- it's just to provide the JSON string that would come 
from a server for demonstration purposes.
*/

let object = {initialTags: ["object", "json-stringify", "data", "json-parse", "tag-editor"]};

let data = JSON.stringify(object); 

/* Client Front-end */

$(".tag-editor").data('attributes-js', data);

data = $(".tag-editor").data('attributes-js');

object = JSON.parse(data);
  
$(".tag-editor").tagEditor(object);
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tag-editor/1.0.20/jquery.tag-editor.min.css" />

<textarea class="tag-editor"></textarea>


<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tag-editor/1.0.20/jquery.tag-editor.min.js"></script>

【讨论】:

  • 不是这样的,我只是想让这个答案起作用,但它不起作用stackoverflow.com/questions/56399563/…
  • 您是否通过单击蓝色按钮来运行示例?你读过这部分吗:“这不是服务器代码——它只是提供来自服务器的 JSON 字符串,用于演示目的。” 你看看你是否从服务器得到一个 JSON (像大多数客户一样)您可以获取该字符串并将其转换为对象。对象是插件会接受的东西。
  • 发生这种情况的原因:Uncaught SyntaxError: Unexpected token s in JSON at position 0 是因为 JSON 从来就不是一个对象。当您需要橙色 let json = {"heyLookAtMeImAnOBJECT": "REAL"}; 时,您正在使用 &lt;textarea...data-att="heyLookAtMeImAnOBJECTBelieveIt: butImReallyAString"&gt; 应用苹果
  • 在我的 PHP array( 'id' =&gt; 'opt-tag-3', 'title' =&gt; 'With attributes (placeholder)', 'type' =&gt; 'tag', 'default' =&gt; '', 'attributes_js' =&gt; array( 'placeholder' =&gt; " 'Enter a term' ", ) ), 和我的 html 打印 &lt;textarea class="tag-editor" type="text" name="pixel2[opt-tag-3]" data-attributes-js="{ placeholder : 'Enter a term'}"&gt;&lt;/textarea&gt; 如何使字符串的参数将它们变成对象并在 tagEditor 插件中执行?
  • 这听起来像是一个 PHP 问题……实际上它的整体更像是一个XY problem。字符串原本应该是一个对象。复制我的演示并删除前两行并在其位置添加以下内容:let data = `{initialTags: ["object", "json-stringify", "data", "json-parse", "tag-editor"]}`; 你应该得到一个错误:Uncaught SyntaxError: Unexpected token i in JSON at position 1
猜你喜欢
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
相关资源
最近更新 更多