我试图使用angularjs从API获取json格式的一些数据。一切都在iOS和浏览器上完美运行,但我在Android设备上得到了一个奇怪的回应。请求是这样的:
$http({
url: baseUrl,
method: "GET",
headers: {
"Content-Type": "application/json"
},
params: {
authKey: myAuthKey,
id: myId,
format: "json"
}
})
.success(function(data, status){
console.log("Success", data); // Here the output is different on Android
orderData(data);
})
.error(function(data, status){
console.log("Error");
console.log(data,status);
});
请求始终成功,并在iOS和桌面浏览器中按预期返回对象。但是当我在Android设备上记录数据时,我得到以下输出:
> Success <html>
> <head>
> </head>
> <body>
> <script>
> var wwwurl='www.mywifiext.com/welcome.htm';
> function check_mobile_device()
> {
> if(navigator.userAgent.indexOf("iPhone") != -1)
> return 1;
> else if(navigator.userAgent.indexOf("Android") != -1)
> return 1;
> else if(navigator.userAgent.indexOf("Windows Phone") != -1)
> return 1;
> else if(navigator.userAgent.indexOf("iPad") != -1 )
> return 0;
> else
> return 0;
> }
> if(check_mobile_device() == '1')
> top.location.href="http://www.mywifiext.net/mobile_welcome.htm";
> else
> top.location.href="http://www.mywifiext.net/welcome.htm";
> </script>
> </body>
> </html>
这是什么,一些奇怪的HTML响应引用一些路由器?我已经在不同的wifi网络上进行了测试,它与设备的3G连接相同。
我最近在我的项目中添加了人行横道并使用了cordova-plugin-whitelist
,它可能与此有关吗?或者这可能是API方面的错误?
编辑:恢复默认浏览器使其正常工作。但为什么?如何让它与Crosswalk一起使用?
答案 0 :(得分:0)
尝试
String url = "http://my-json-feed";
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.v("Response: ", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
答案 1 :(得分:0)
与您的代码无关。
您处于开放的WiFi网络中,需要通过HTML页面进行身份验证。当您通过HTTP请求资源并且尚未在WiFi接入点上进行身份验证时,您将被重定向到欢迎页面。
可能的解决方案:
打开网络浏览器和任何网页。您将被重定向到欢迎页面(您使用$http.get()
下载的页面)。填写您的网络访问数据并接受条件。在那之后,你的Cordova应用程序应该按照你期望的方式工作。
对于您的用户:
也许某种错误处理可以帮助您的用户遇到类似的情况。您可以添加一个处理非JSON响应的http拦截器,并告诉用户他们可能必须检查他们的网络并登录到接入点。