【问题标题】:AngularJS $http.post(): returns ERR_EMPTY_RESPONSEAngularJS $http.post():返回 ERR_EMPTY_RESPONSE
【发布时间】:2015-11-30 13:01:47
【问题描述】:

我有一个表单需要将数据发布到位于同一网络中的服务器。将此数据发布到服务器时,它会返回ERR_EMPTY_RESPONSE

我还尝试使用 POSTMAN 向同一个 url 发帖,这种方式似乎可行。

是同源政策造成的吗?是否有任何解决方案可以绕过该政策?

注意:不能改变服务器端的任何东西,只能改变客户端

这是我用来发布数据的工厂:

  app.factory("SendForm", ["$http", "CONFIG", function($http, CONFIG) {
      return {
        sendInfo: function(dynamic, user1, user2, user3, user4, user5, fixed, aux, onSuccess, onError, onFinally) {
          var url = CONFIG.urlSendForm + "?absolute=" + CONFIG.absolute + "&info" + dynamic + "$dyn=" + user1 + "&info2=" + user2 + "&info3=" + user3 + "&info4=" + user4 + "&info5=" + user5 + "&fixed=" + fixed + "&aux=" + aux;
          $http.post(url, {
              headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
              }
            })
            .success(function(response, data) {
              console.log("success " + response + data + status);
              onSuccess();
            }).error(function(response, data, status, headers, config) {
              onError(response);

            });
        }
      }
    }]);

这是我在发布后在 shell 中登录的内容:

选项http://192.168.5.2:9000/?absolute=1234&info1$dyn=1&info2=1&info3=undefined&info4=undefined&info5=undefined&fixed_info=undefined&aux_info=undefined net::ERR_EMPTY_RESPONSE

【问题讨论】:

  • 同一个网络?是同一个域吗?
  • Angular 的 POST 机制功能与其他 javascript 略有不同。我不记得具体细节,但我知道对于我的任何 Angular 项目,我必须使用 file_get_contents('php://input') 而不是 $_POST。所以试试$POST = json_decode(file_get_contents('php://input'),true);
  • 您是否使用query strings 发布数据?
  • @Arg0n 是的,它在同一个网络中,我的项目在本地主机中,服务器在另一台电脑中。 @charliebrownie 是的,我正在使用查询字符串,当用户没有填写表单中的字段以返回空(如 user1=)而不是出现未定义时,是否存在某些问题?要我在问题中添加 html 表单吗?
  • 您为什么不在请求正文中发布您的data?我鼓励您这样做:在您的请求正文中发布您的表单data

标签: javascript angularjs http http-post


【解决方案1】:

你的参数顺序不好

发布(网址,数据,[配置]); DOC HERE

改成

var data = {
dynamic: dynamic,
user1: user1,
user2: user2,
.....
.....
}

var config = {
headers: { 'Content-Type': 'application/x-www-form-urlencoded'}
}

$http.post(CONFIG.urlSendForm, data , config).success(...).error(...);

【讨论】:

  • 现在浏览器控制台中显示:XMLHttpRequest cannot load 192.168.5.2:9000。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'localhost'。
  • @changez 这就是我在评论中要问的问题。 “是同一个域吗?”我想答案是否定的。
  • 是的,不能超过同源错误(如果您无法访问服务器端)......解决方案应该是 JSONP,但无论如何服务器都支持它
  • 你遇到的问题与CORS: Cross-origin resource sharing有关
  • 不....这是服务器使用的安全控制....您不能从客户端设置它
猜你喜欢
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 2017-01-18
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多