$ .ajax调用有效,$ http.get()没有(404,未找到)

时间:2015-12-22 21:46:59

标签: javascript angularjs

我正在尝试用$.ajax替换$http.get()来电。我尝试时收到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,类型和数据完全相同。我错过了什么?

1 个答案:

答案 0 :(得分:2)

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

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

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