3

我不是任何类型的 RESTful API 专家,但我PUT/DELETE在 AngularJS 应用程序中有一个简单的函数,到目前为止它一直按预期运行。我正在尝试确定此问题是否可能出在我的应用程序中,或者在运行端点的(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 

为什么我会GET在 PUT 请求不成功时收到错误消息?这是否指向我的功能中的问题,或端点的问题?

感谢您在理解此问题方面提供的任何帮助。


更新 1

来自网络面板的信息:调用上面的 $http 函数会触发两个同时请求,一个“PUT”和一个“GET”。“PUT”返回 301 代码,“GET”返回 500 服务器错误(我认为这是意料之中的,因为此端点未设置为响应“GET”,仅响应“PUT”和“DELETE” ')。

那么:为什么我的代码会使用不同的方法同时生成两个请求?

4

2 回答 2

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
于 2014-01-28T00:17:36.627 回答
0

对于未来寻求类似问题答案的人:尝试为调用的每个操作返回 GET 是一种标准行为(一般是 REST 还是这种实现?不确定)。这方面的证据是,如果我检查所有其他(成功的)$http 函数的网络面板,它们还有两个可见的操作:原始的 PUT/GET/DELETE 等,+ 一个 GET。

我们在这些特定请求的 GET 上看到 500 错误,因为此特定端点的配置不允许 GET。这不应该对此端点上的 PUT/DELETE 操作产生任何影响 - 500 错误与 PUT/DELETE 操作不起作用的原因无关。就试图解决这个具体问题而言,这是一条红鲱鱼。

PUT/DELETE 不起作用的原因是服务器端的服务中断。

于 2013-11-13T11:40:49.620 回答