当前位置: 首页 > 知识库问答 >
问题:

$http.post没有在AngularJS工作[重复]

太叔飞翰
2023-03-14

我试图提出一个$http.post请求,但我有以下错误:

XMLHttpRequest无法加载https://mipage.com/examplephp.请求标头字段Content-Type不允许访问控制允许标头在飞行前响应。

如果我将$http.post更改为$http.get请求,则服务器响应将使用JSON,因此。。我认为这不是CORS的问题。我还在爱奥尼亚项目中放置了一个代理。

这是我的功能:

function obtenerSesion() {
        debugger;
        return $http.post(iniciarSesionUrl,
                 {params: {username: 'prueba123',password: 'prueba123'}}).then(function(response) {
            canchas = response.data;        
            return canchas;
        })
        .catch(generarError);
    }

但不是。我在服务器上硬编码了数据所以...问题出在Angular JS上

你能帮我解决我的问题吗?谢谢

共有2个答案

宗鸿博
2023-03-14

向其发送POST请求的服务器需要在其响应中包含Access Control Allow标头。将它们放入客户端无效。

服务器指定是否接受跨源请求,因此客户端无法自行决定是否允许CORS。

这里用这个帖子解释

桂学
2023-03-14

XMLHttpRequest无法加载https://mipage.com/examplephp.请求标头字段Content-Type不允许访问控制允许标头在飞行前响应。

如果我将$http.post更改为$http.get请求,则服务器响应将使用JSON,因此。。我认为这不是CORS的问题。我还在爱奥尼亚项目中放置了一个代理。

说明:

当您从$HTTP.GET()发出HTTP GET请求,并传递参数对象时,这些参数会附加到querystring中,并且由于请求没有消息体,httpProvider会删除请求的内容类型标头。

因此,querystring中的$http.get参数:

username=prueba123&password=prueba123

否则,对于从$HTTP.POST()传递params对象的HTTP POST请求,它们将在json中解析并插入请求的消息体中,然后httpProvider添加HTTP请求头内容类型:application/json。

因此,请求消息正文中的$http.post参数:

{"username":"prueba123","password":"prueba123"}

这是由角型http提供商的默认transformRequest函数完成的

不知何故,您违反了CORS策略,然后您必须配置api web服务器或api后端来处理违反CORS策略的情况,特别是您的错误是由于访问控制请求标头响应字段中缺少内容类型引起的。

可能的解决方案(针对您的具体情况)

如果您正在使用ionic framework从本地运行应用程序,则需要配置ionic.config.json文件,并添加一个与托管应用程序的地址和端口相同的代理,这样您就不会违反CORS策略。

例如:

    {
  "name": "example project",
  "app_id": "11ffxxxx",
   //etc etc..
  "proxies": [
    {
      "path": "/api",
      "proxyUrl": "http://192.168.1.152:9083/api"
    }
  ]
}

最后,在angular应用程序中,当从本地运行时,您需要正确配置apiendpoint:

function obtenerSesion() {
        debugger;
        return $http.post("/api",
                 {params: {username: 'prueba123',password: 'prueba123'}}).then(function(response) {
            canchas = response.data;        
            return canchas;
        })
        .catch(generarError);
    }

我建议您通过使用javascript任务运行程序(gulp、grunt)来自动化此过程

 类似资料:
  • 问题内容: 当我使用我的代码时,但是如果我使用$ http.post,则永远不会将参数获取到请求.php文件中。 这是服务功能: 和控制器功能: 和我的AJAXRequest.php文件 如果我使用 $ http.post() 输出 : 如果我使用 $ http.get(), 我的输出是: 我检查了FireBug工具中的帖子,该帖子将数据发送到我的php文件中。但PHP文件没有参数。 如果我使用

  • 我对AngularJS不熟悉,只是在玩弄这些东西。这是我的HTML: 以下是控制器代码: 我已经使用属性设置了输入文本字段的值。因此,我期望控制器函数读取这些值并在页面加载时返回全名。但我得到的是: 输入文本框为空。为什么会这样呢?

  • 问题内容: 当我在AngularJS中使用类似对象的对象时: 签名: 不论值如何,都会在chrome流量监听器上每次删除该属性。 有一些秘密的$除垢剂;)吗? 更新:角度 > = 1.3现在不会删除$ ATTRS。 问题答案: 是的,通过服务发送数据时,Angular会删除美元前缀的属性。 $ http服务使用方法将对象序列化为JSON字符串。该方法使用前$符号剥离属性,因为angular在内部使

  • 但是,有没有一种方法可以使用$http.post()来实现这一点?我是否必须始终包含头部才能使其工作?我相信上面的内容类型指定了发送数据的格式,但是我可以将它作为javascript对象发送吗?

  • 问题内容: 谁能告诉我以下语句为什么不将帖子数据发送到指定的URL?调用了url,但是在打印$ _POST时在服务器上- 我得到一个空数组。如果我在将消息添加到数据之前在控制台中打印消息-它显示正确的内容。 我也尝试过将数据作为字符串(具有相同的结果): 当我以以下格式使用它时,它似乎可以正常工作: 但是有没有办法用$ http.post()做到这一点- 我是否总是必须包含标头才能使其正常工作?我