【问题标题】:send query string via queue.defer通过 queue.defer 发送查询字符串
【发布时间】:2016-03-01 14:45:47
【问题描述】:

如何使用队列延迟方法发送数据(查询字符串)?

目前我使用d3.json 获取静态文件如下。

queue()
    .defer(d3.json, "js/file1.json")
    .defer(d3.xhr, 'js/file2.json')
    .await(callback)

现在,我还需要“获取”一个 .php 文件,可能通过查询字符串发送一些数据。在 JQuery 中,我会这样做

$.getJSON('ajax/file1.php', {data: some_var}, callback)

所以,我尝试将上述内容包装在一个函数中并将其传递给defer

get_paths = function(path) {$.getJSON(path, {data: some_var})}
queue()
    .defer(d3.json, "js/world-110m_MC.json")
    .defer(get_paths, 'ajax/file1.php')
    .await(callback);

但是,不幸的是,根本没有调用回调(虽然,我看到两个 ajax 请求是通过 chrome 中的网络选项卡发出的)

【问题讨论】:

  • 我不明白。为什么不直接使用 d3.json 并调用您的 php 文件?

标签: javascript jquery d3.js queue.js


【解决方案1】:

如果你想添加一个查询字符串,你可以这样做。

queue()
    .defer(d3.json, "js/world-110m_MC.json")
    .defer(d3.json, 'ajax/file1.php?data=' + $.param(some_var))
    .await(callback);

如果你有多个参数,要在没有 jquery 的情况下构建查询字符串,你可以使用这样的代码

var params = {
    parameter1: 'value1',
    parameter2: 'value2',
    parameter3: 'value3' 
};

var queryString = Object.keys(params)
    .map(k => k + '=' + encodeURIComponent(params[k]))
    .join('&');

【讨论】:

  • 我的参数包含嵌套的对象数组,所以为了懒惰,我一直在寻找一种直接将变量传递给函数的方法(如在 $.getJSON 中)
  • 用 jquery 构建参数也应该很容易。认为它与回调有关,即 jquery 传回。只需使用api.jquery.com/jquery.param 作为查询字符串。 @Michele 修正了我的答案,所以现在真的很容易。
猜你喜欢
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
相关资源
最近更新 更多