我正在尝试使用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'标头。
。
你能帮助我吗?
答案 0 :(得分:0)
我不完全确定您为什么不会在Android代码中出现类似的错误,或者即使您应该这样做,因为我不熟悉原生Android本身。但是你在Ionic中使用Angular的原因是服务器需要实现CORS来摆脱它。
来自MDN:
当资源从与第一个资源本身所服务的域不同的域请求资源时,会生成跨源HTTP请求。例如,http://domain-a.com提供的HTML页面会为http://domain-b.com/image.jpg发出src请求。如今,Web上的许多页面都会加载来自不同域的CSS样式表,图像和脚本等资源。