【问题标题】:Angular http.get/post with URL in data being passedAngular http.get/post 与正在传递的数据中的 URL
【发布时间】:2015-10-08 14:24:12
【问题描述】:

我有以下 http.get 请求...

$http.get("api/checkSave/"+ JSON.stringify($scope.programDetails)).then(function(data) {
....
});

在我的 programDetails 对象中,至少有一个字段可以包含 URL。我认为 stringify 会正确编码对象,因此它会正确传递给我的 PHP 函数。但似乎发生的是 URL 未正确发送。我收到一个错误,服务器以 404 not found 错误响应。我手动尝试删除请求中的 URL(将其复制到浏览器并为 URL 字段发送一个空字符串)并且请求被正确处理 - 这就是为什么我认为 stringify 不能满足我的需要。

我还需要稍后通过 http.post 发送此数据以将数据保存在对象中。希望我在获取中需要做的任何事情在我发帖时也适用。

stringify 应该正确地传递数据还是我需要以不同的方式对其进行编码?我一直在其他应用程序中使用 stringify,但不必在数据中传递 URL。

如果我需要做不同的事情,我需要知道在 PHP 端做什么来解码它以进行处理。我为 get/post 找到的示例似乎都传递了单个变量,而不是对象,而不是其中一个变量中的 URL。我已经看到 encodeURIComponent 提到,但不确定这是否是我需要使用的,如果是,那么在 PHP 端使用什么来正确解码。

【问题讨论】:

  • 不要使用encodeURIComponent代替stringify,而是将它们组合起来......您还应该将它添加到像'?json=XXXX'这样的变量中

标签: php angularjs post get


【解决方案1】:

这实际上与由 URL 组成的数据没有太大关系(只是 URL 中的字符比其他数据更有可能在 URL 中包含具有特殊含义的字符)。

问题是您将数据放入一个 URL 并且 URL 不是 JSON 文本。

要对字符串进行编码以将其放入 URL,请使用 encodeURIComponent

【讨论】:

  • 好的,所以我尝试使用 $http.get("api/checkSave/"+ encodeURIComponent(JSON.stringify($scope.programDetails))).then(function(data) 和 as只要一个字段(包含一个 url)中没有 //(无论是一个还是两个),get 就会起作用。所以如果它包含 'yahoo.com' - get 有效,如果它包含 '/ /yahoo.com' - 获取失败。'/' 没有在整个对象中编码。
  • 他们应该是。在将值传递给$http.get 之前,您可以通过查看该值来进行检查。可能它们没有按照 Web 服务预期的方式进行编码,但问题中没有关于 Web 服务的信息。
  • 我将它输出到控制台,并且包含 url 的部分确实似乎已编码,但它必须在将其传递给 PHP 时执行某些操作,以便它找不到我的函数来检索它数据。这是 URL 为 ks%22%3A%22https%3A%2F%2Fyahoo.com%22%2C%22 的部分我没有在其中看到“/”,因此 PHP 可能出于某种原因不接受它....因为 GET 错误返回 URL not found...
【解决方案2】:

所以最终我不得不替换包含链接的字段中的“/”,然后它才起作用。否则,'/' 让我看起来好像在我的 get 调用中传递了额外的参数。感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-08
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多