【问题标题】:Porting function from java (Android) to AngularJs将函数从 java (Android) 移植到 AngularJs
【发布时间】:2016-02-19 09:54:06
【问题描述】:

我正在尝试使用 Ionic 编写一个旧的原生 Android 应用程序,我需要有关 http 请求的帮助。我是 AngularJS 的新手(也是 js)。

我的 Android 代码具有如下功能:

String address = "http://www.example.com";
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(address);
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("param", sParam));
try {
    post.setEntity(new UrlEncodedFormEntity(pairs));
    HttpResponse response = client.execute(post);
    BufferedReader rd = new BufferedReader(new InputStreamReader(responsegetEntity().getContent()));
    StringBuilder sBuilder = new StringBuilder();
    String sLine = "";
    while ((sLine = rd.readLine()) != null) {
            sBuilder.append(sLine).append("\n");
    }
    String sContent = sBuilder.toString();
    (...parsing sContent...)
} catch (Exception e) {
    //something
}

如果页面多于一页,我会调用类似的函数

String address = "http://www.example.com/result.do?page="+ iPage;
HttpPost post = new HttpPost(address);
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("param", sParam));
Cookie ck = client.getCookieStore().getCookies().get(0);
pairs.add(new BasicNameValuePair("param_ck", ck.getValue()));
try {
    post.setEntity(new UrlEncodedFormEntity(pairs));
    HttpResponse response = client.execute(post);
    (..parsing..)
}

所以,我阅读了网页的 html 内容(我不是所有者),然后我用它来做一些事情。

我试过 $http.post 但我不确定它是否相同

.factory('Service', function($q,$http) {
  return {
    getResult: function(param) {
      var q = $q.defer();
      var address = "http://www.example.com";
      var sParam = "param";
      $http({
        url: address,
        method: "POST",
        data: {
          'param' : sParam
        }
      })
      .then(function(response) {
        (...)
        q.resolve(position);
      },
      function(error) {
        (...)
        q.reject(error);
      });
      return q.promise;
    }
  };
});

PS:我明白了

请求的资源上不存在“Access-Control-Allow-Origin”标头。

这样。

你能帮帮我吗?

【问题讨论】:

    标签: javascript java android angularjs ionic-framework


    【解决方案1】:

    我不完全确定为什么您的 Android 代码没有遇到类似的错误,或者即使您应该这样做,因为我不熟悉原生 Android 本身。但是你在 Ionic 中使用 Angular 得到这个的原因是服务器需要实现 CORS 来摆脱它。

    来自MDN

    当资源从与第一个资源本身所服务的域不同的域请求资源时,它会发出跨域 HTTP 请求。例如,从 http://domain-a.com 提供的 HTML 页面向 http://domain-b.com/image.jpg 发出 src 请求。如今,网络上的许多页面从不同的域加载资源,例如 CSS 样式表、图像和脚本。

    【讨论】:

    • 我在 3 年前写了这个函数,我不太记得了,但最初我也收到了 Android 代码的 No 'Access-Control-Allow-Origin' ,然后我用 DefaultHttpClient 修复了(也许)。