【问题标题】:$.ajax call works, $http.get() does not (404, not found)$.ajax 调用有效,$http.get() 无效(404,未找到)
【发布时间】:2015-12-22 21:46:58
【问题描述】:

我正在尝试用$http.get() 替换我的$.ajax 呼叫。我尝试时收到 404 Not Found 错误。

这里是ajax调用:

    //  ToDo: See if there is an $http.get equivalent. That way the callback doesn't have
    //        to be wrapped in $scope.apply().
    $.ajax({
        url: '/PrestoWeb/api/ping/responses/',
        type: 'POST',
        data: JSON.stringify(latestPingRequest),
        contentType: "application/json",
        success: function (responses) {
            // do stuff
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });

这是 $http 调用:

    var config = {
        url: '/PrestoWeb/api/ping/responses/',
        method: 'POST',
        data: JSON.stringify(latestPingRequest),
        contentType: "application/json"
    };

    $http.get(config)
        .then(function (response) {
            // do stuff
        }, function (response) {
            alert(response);
    });

ajax 调用有效。 http调用没有。两个调用中的 URL、类型和数据完全相同。我错过了什么?

【问题讨论】:

  • 你知道,$http.getmethod: post 是矛盾的,对吧?
  • 您正在原始 $.ajax 调用中发帖。你要发 POST 还是 GET?如果发布,那么你应该使用 $http.post(config)
  • 这些投票者太荒谬了。为什么投反对票?如果是因为 OP 不知道使用 $.post 而不是 $.get,那是因为他清楚地展示了他的代码以及他遇到的问题。对我来说似乎是个好问题
  • $http.post()$http.get() 是快捷方式。第一个参数应该是一个 URL。你甚至不需要配置对象,因为 Angular 会为你做这些事情:$http.post(url, data);
  • $http.post(url, data, config)。此外,$http 模块会自动为您进行字符串化,因此您无需自己执行此操作。编辑是@SunilD。说,你可能只需要$http.post(url, { some: 'data' })

标签: javascript angularjs


【解决方案1】:

在我看来,您遇到的问题是使用 $http.get 而不是 $http.post。 $http 对象有一些常用 http 动词的辅助方法,例如$http.get, $http.post, $http.put 将方法设置为简写的名称。 post 的辅助方法需要三个参数,一个 url,你的数据和一个配置对象,所以你的调用看起来像,$http.post('/PrestoWeb/api/ping/responses/', latestPingRequest, config)

在您的情况下,您在 http 配置对象中指定 method: 'POST',然后使用 $http.get 方法,该方法将发出获取请求,而不是您在配置对象中指定的内容。

因为您在配置对象中指定了方法,所以您可以只使用$http(config) 并完全跳过辅助方法。我实际上更喜欢以这种方式做事,因为您的完整请求是在配置对象中定义的,而不是在使用的配置对象和方法中定义的。辅助方法也都有不同的签名,这令人困惑。更容易坚持 $http(config) IMO

【讨论】:

  • 谢谢!这很有帮助!我学到了一些东西,这就是 SO 的意义所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2017-12-14
  • 2018-05-10
  • 1970-01-01
  • 2013-08-20
  • 2021-08-06
相关资源
最近更新 更多