我不是任何一种RESTful API专家,但我在AngularJS应用程序中有一个简单的PUT/DELETE
函数,该函数到目前为止一直按预期运行。我试图弄清楚这个问题是否可能存在于我的应用程序或运行端点的(php)后端。其他REST服务正常运行&服务器似乎运行正常。
此功能仅调用PUT或DELETE,分配为var method
:
if (food.favourite === true) {
method = "PUT";
console.log("method is " + method)
} else if (food.favourite === false) {
method = "DELETE";
console.log("method is " + method)
}
$http({
method: method,
url: $scope.URL
}).success(function (data, status, headers, config) {
console.log(method + " successful")
}).error(function (data, status, headers, config) {
console.log(method + " not successful")
});
我的应用中有一个$http GET
使用不同的端点。在我的应用程序中的任何地方都没有$http GET
指向此端点 - 我已经广泛搜索过。
当我触发包含$ http的函数时,控制台会显示:
method is PUT
GET http://localhost:8888/api/ext/51/ 500 (Internal Server Error)
PUT not successful
为什么我会在不成功的PUT请求中收到GET
错误?这是指我的函数中的问题,还是端点问题?
感谢您在理解此问题时提供任何帮助。
更新1
来自网络面板的信息:调用上面的$ http函数会触发两个同时发出的请求,一个'PUT'和一个'GET'。 'PUT'返回301代码,'GET'返回500服务器错误(我认为这是预期的,因为此端点未设置为响应'GET',仅为'PUT'和'DELETE “)。
那么:为什么我的代码会用不同的方法生成两个同时发出的请求?
答案 0 :(得分:0)
对于未来寻求类似问题答案的求职者:它是一种标准行为(一般是REST还是这种实现?不确定)尝试为每个被调用的动作返回GET。这方面的证据是,如果我检查网络面板中所有其他(成功的)$ http函数,它们还有两个可见的操作:原始PUT / GET / DELETE等,+一个GET。
我们在GET上看到这些特定请求的500错误,因为此特定端点的配置不允许GET。这不应对此端点上的PUT / DELETE操作产生任何影响 - 500错误与PUT / DELETE操作无效的原因无关。在试图解决这个具体问题方面,它是一个红色的鲱鱼。
PUT / DELETE无法正常工作的原因是因为服务在服务器端被破坏了。
答案 1 :(得分:0)
我遇到了这个问题,问题在于我如何输出header
的第一个参数中的错误。他们需要采用以下格式:
header('400: Error', true, 400);
或者在你的情况下,当然:
header('301: Moved Permanently', true, 301);
header('Location: ' . $url);
请注意,这不起作用:
header('Some Random Text', true, 400); // $http.error shows status of 500