我正在尝试用$.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,类型和数据完全相同。我错过了什么?
答案 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