【问题标题】:Ajax GET requests: use parameters or put data in URL?Ajax GET 请求:使用参数还是将数据放入 URL?
【发布时间】:2008-10-20 13:22:42
【问题描述】:

在 Ajax GET 请求中将数据作为参数传递与 URL 的一部分相比有什么优势?

使用参数:

var ajax = new Ajax.Request('server.php',{
    parameters: 'store=11200&product=Meat',
    onSuccess: function(myData){whatever}
});

使用网址:

var ajax = new Ajax.Request('server.php?store=11200&product=Meat',{
    onSuccess: function(myData){whatever}
});

【问题讨论】:

  • 您是否使用 Prototype 作为 ajax 库?从方法之类的看是这样的。

标签: javascript ajax prototypejs


【解决方案1】:

使用parameters 参数的一个优点是您可以将Hash-like 对象而不是字符串传递给它。 (但是,如果您这样做,请确保将 method 参数设置为 "GET",因为 Prototype Ajax 请求的默认方法是 POST;有关详细信息,请参阅 the Prototype Introduction to Ajax。)

另一个更符合您提供的示例的优势是您可以将请求 URL 与发送给它的选项分开。例如,如果您需要向几个不同的 URL 发送一堆类似的请求,这可能会很有用。 (在这种情况下,为每个请求修改一个公共参数Hash 可能比使用参数字符串更有用。)

如需了解更多信息,请参阅the Prototype documentation of Ajax options

【讨论】:

  • 我愿意接受这个答案,但由于某种原因我没有获得这样做的链接。
  • 它不再是一个链接了。这是投票数下方的复选标记图像。
  • 找到答案。不要忘记,在构建请求 url 时,任何(好的)AJAX 库都会负责将那些特殊字符(ç、ã、空格、?等)转换为转义字符,这就是优势所在。
【解决方案2】:

parameters 我最喜欢的一个用途是传递表单的所有字段而不明确列出它们:

new Ajax.Request('/myurl.php', {
  method:  'get',
  parameters:  $('myForm').serialize(),
  onSuccess:  successFunc(),
  onFailure:  failFunc()
}

【讨论】:

  • Prototype 的Form.Request 函数使这变得更加容易。给它一个表单,它会使用表单的action 属性作为 URL 发出 Ajax 请求,另外它会序列化表单并默认将这些值作为参数传递。
【解决方案3】:

要回答这个问题,您应该知道参数的工作方式。 HTTP 基本上(我知道,还有更多)有两种请求数据的方法:GET 和 POST。

对于 GET,参数 附加到您请求的资源中,就像您在上面的代码中所做的那样:/my/resource/name?para1=bla。在这里,如果直接将 if 附加到资源名称或使用参数选项,则没有区别。 GET 通常用于请求数据(它的 GET ;)

对于 POST,参数 与 HTTP 正文中的资源分开编写。为此,您必须使用参数选项。 POST 用于发送(大量)数据。

要指定使用哪种请求方法,请使用 method 选项。

注意:GET 资源的长度有硬性限制(取决于服务器到服务器)。所以永远不要使用 GET 发送太多数据。

【讨论】:

    【解决方案4】:

    您也可以使用以下格式:

    var ajax = new Ajax.Request('server.php',{
      parameters: {
         store: 11200,
         product: "Meat"
      }
      onSuccess: function(myData){whatever}
    });
    

    这样做的好处是您可以在不更改 URL 的情况下从 GET 更改为 POST。

    【讨论】:

      【解决方案5】:
      • 易读性
      • 易于使用对象并将其序列化 ({store: 11200, product: "Meat"})
      • 易读性

      【讨论】:

      • 您的回答没有引用该问题,没有任何意义,并且您两次包含“易读性”。
      【解决方案6】:

      除了格式和偏好之外,从技术角度来看,这并不重要,因为获取请求总是在 URL 中包含数据。参数只是构建 GET 请求的一种便捷方式。

      【讨论】:

        猜你喜欢
        • 2011-12-05
        • 1970-01-01
        • 1970-01-01
        • 2015-12-19
        • 1970-01-01
        • 2016-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多