【问题标题】:Passing a query parameter from an AJAX get call to an express route将 AJAX get 调用中的查询参数传递给快速路由
【发布时间】:2017-05-02 12:02:48
【问题描述】:

我现在正在使用 Node 的 twitter API 包装器,并试图弄清楚如何将查询参数从 HTML 表单传递到 AJAX 获取请求,然后将该参数传递到我的 Express 路由中,而不是不仅仅是让表单动作直接进入路由。

这是我的 HTML 代码

  <form id="searchTerm">
    Keyword:<input id="keyword" type="text" name="q" placeholder="Keyword">
    <input type="submit">
  </form>

我的客户端 Javascript

$(document).ready(function() {
  $('#searchTerm').on('submit', function() {
    $.ajax({
      type: 'GET',
      data: q,
      url: '/search/tweets/term',
      success: function(data) {
        console.log(data);
      },
      error: function(error) {
        console.log(error);
      }
    });
  });
});

然后是我的 Node.JS 路由:

// Search by keywords or phrases
app.get('/search/tweets/term', function(req, res) {
  var q = req.query.q;

// Accesses the Twitter API and pulls back the respective tweets
  client.get('search/tweets', {q: q, count: 100, lang: 'en', exclude: 'retweets'}, function(error, tweets, response) {
    if(!error) {
      res.send(tweets);
    } else {
      console.log(error);
      res.status(500).send(error.stack);
    }
  });
});

但是,每当我在表单中输入值时,我的终端都会收到“查询缺少参数”错误消息。不知道我做错了什么。

更新

通过以下方式让它工作:

$(document).ready(function() {
  $('#searchTerm').on('submit', function(e) {
    e.preventDefault();
    var q = $('#keyword').val();

    $.ajax({
      type: 'GET',
      data: {q: q},
      url: '/search/tweets/term',
      success: function(data) {
        console.log(data);
      }
    })
  })
})

但是,由于我正在实现 e.preventDefault(),因此我丢失了 URL 中的查询参数。由于我想让用户能够将 URL 共享给特定的关键字,有没有办法能够在 URL 中保持这些参数完整,同时仍然让 JSON 发送到客户端?还是只需要在服务器端操作 JSON 并通过模板引擎呈现数据?

【问题讨论】:

  • data: q, 你在哪里定义了q
  • 数据:“q”引号?
  • 阻止表单提交。因为如果您不这样做,您的 ajax 正在获取结果,但网页已导航到下一页...
  • @MariaInesParnisari - 即使我将:var q = $('#keyword').val() 添加到 ajax 调用之外的范围内,我仍然收到错误 @deostroll 也试过了,它似乎仍然给我同样的错误.真的在这个问题上摸不着头脑

标签: javascript jquery node.js ajax


【解决方案1】:

试试这个

$(document).ready(function() {
  $('#searchTerm').on('submit', function() {
    $.ajax({
      type: 'GET',
      data: q,
      url: '/search/tweets/term?q=',
      success: function(data) {
        console.log(data);
      },
      error: function(error) {
        console.log(error);
      }
    });
  });
});

【讨论】:

  • 您的“试试这个”有什么解释吗?例如,为什么你的代码可以工作,为什么 OP 代码不能工作。
  • 他在 node 参数上使用 var q = req.query.q 需要 q 参数来获取值。
猜你喜欢
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 2019-07-21
相关资源
最近更新 更多