4

这是我的代码,基本上我有一个用 jQuery 编写的通用 open_modal 函数,我想用它data-fields来传递{'json':'data'}.

所以这是我的代码。

JSfiddle

HTML

    <a href="#" class="send_request" data-dataset="{'test':1}" data-url="/test.html">Data load!</a>
<div id="area"></div>

​<strong>jQuery

   $("body").delegate(".send_request", 'click', function(e) {

        var $this = $(this);
        var $modal_data = $("#area");
        var $url = $this.attr('data-url');
        var $dataset = JSON.stringify($this.data('dataset'));

        alert($dataset);

        $("#area").load($url,$dataset);
        return false;
    });​

基本上它不起作用,数据没有被传递。是否需要先以某种方式解析数据字段数据?

4

3 回答 3

2

data-dataset 中的对象在检索时已经是一个 JSON 对象,并且在指定 JSON 属性名称时还需要双引号。执行以下操作应该有效:

在您的 html 片段中:

data-dataset="{'test':1}"data-dataset='{"test":1}'

在你的 JS 代码中

var $dataset = JSON.stringify($this.data('dataset'));

var $dataset = $this.data('dataset');

这是您的 jsfiddle http://jsfiddle.net/C3Cbe/2/的修改版本。

希望有帮助

于 2012-11-26T13:54:15.400 回答
0

属性值已被字符串化,您必须运行它JSON.parse才能将其从 JSON 文本转换为 JavaScript 对象。

无法判断是否应将其转换为 JavaScript 对象,因为我们不知道请求另一端的服务器期望什么。你当然不应该stringify这样做。

但是,您的示例是无效的 JSON。JSON 字符串必须用"字符引用。'是不能接受的。

于 2012-11-26T13:32:15.237 回答
0

您的代码片段可以很好地检索这两条数据,但它稍后会使用文字 JSON 字符串(不是 JavaScript 对象)提供 AJAX 调用:

$("#area").load($url,$dataset);

这最终会产生这样的 GET 请求:

/test.html?%22{%27test%27:1}%22

...这可能不是你想要的。

更新:

我的建议是:

  1. 修复当前无效的 JSON 字符串(您使用单引号作为属性名称)
  2. 使用JSON.parse()或 jQuery 的等价物。
于 2012-11-26T13:24:59.727 回答