Restangular POST 请求未按预期工作

Posted

技术标签:

【中文标题】Restangular POST 请求未按预期工作【英文标题】:Restangular POST request not working as expected 【发布时间】:2015-04-11 16:25:21 【问题描述】:

我正在尝试向 REST api 发出 POST 请求。当我尝试使用带有以下代码的restangular时

 var cust='name':'test';
return Restangular.all('enquiry').post(cust).then(function(response) 
            console.log("Object saved OK");
        , function(response) 
          console.log("There was an error saving");
          console.log(response);
        );

控制台出现错误

 XMLHttpRequest cannot load http://localhost/api/enquiry. The request was redirected to 'http://localhost/?search=', which is disallowed for cross-origin requests that require preflight.

这意味着服务器没有将请求视为 POST,因此 url 重定向不会转到正确的 API 页面

但是当我尝试使用 Google chrome REST 控制台发出 POST 请求时,它会转到正确的 API 页面并获得预期的结果

POST http://localhost/api/enquiry 502 (Bad Gateway)request.js:1 b.RESTRequest.Class.sendmootools-core-1.4.0.js:1 b.extend.$ownerapp.js:1 document.getElement.addEvents.submitmootools-core-1.4.0.js:1 (anonymous function)mootools-core-1.4.0.js:1 (anonymous function)mootools-core-1.4.0.js:1 Array.implement.eachmootools-core-1.4.0.js:1 invoke.fireEventapp.js:1 document.getElement.addEvents.postmootools-core-1.4.0.js:1 (anonymous function)mootools-core-1.4.0.js:1 (anonymous function)mootools-core-1.4.0.js:1 Array.implement.eachmootools-core-1.4.0.js:1 invoke.fireEventapp.js:1 document.getElement.addEvents.click:relay(input[type="button"], input[type="submit"], input[type="reset"])mootools-core-1.4.0.js:1 lmootools-core-1.4.0.js:1 dmootools-core-1.4.0.js:1 o

事件虽然 REST 控制台中的结果是 502 错误,但这是意料之中的。 我注意到使用 REST 控制台的输出是 POST http://localhost/api/enquiry 502 (Bad Gateway) 并且使用 restangular 它的 XMLHttpRequest 无法加载 http://localhost/api/enquiry 为什么通过 Restangular 发送的请求不考虑作为服务器中的 POST 请求,而是在 REST 控制台中工作?

服务器端接受的标头是

header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: PUT, GET, POST");
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

【问题讨论】:

您收到 CORS 错误检查您的服务器配置... header("Access-Control-Allow-Origin: *");存在于服务器中,所以这会产生问题吗? 【参考方案1】:

我已将 restangular POST 请求代码更改为

return Restangular.all('enquiry').post(cust,'','Content-Type': 'application/x-www-form-urlencoded').then(function(response) 
        console.log("Object saved OK");
    , function(response) 
      console.log("There was an error saving");
      console.log(response);
    );

Content-type header 已经解决了这个问题。

【讨论】:

以上是关于Restangular POST 请求未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:Jquery 发布请求未按预期工作

Angular HTTP GET 请求未按预期工作

AlamoFire GET api 请求未按预期工作

Oauth2 安全配置匹配器请求过滤未按预期工作

AWS API Gateway 限制未按预期工作

Github Actions 自动合并未按预期工作