我知道Stack Overflow已经多次解决这个问题,但没有一个解决方案对我有用。
在设备上运行时,我无法在我的phonegap应用程序中获得任何ajax请求(Android 4.4.2),但桌面浏览器的一切正常。
首先我尝试了AngularJS $ http
然后我尝试了jQuery .get
然后我尝试了原始xhr
在所有情况下,请求立即失败,没有响应。我尝试过从我自己的服务器,谷歌服务器和其他地方请求数据,都是一样的。我已尝试在config.xml中将我的域列入白名单,但形式仍然无效。我甚至打开了控制台,并手动创建了一个XHR,并尝试对它进行GET,同样的事情发生了。请求立即失败。如果有人能帮助我,那就太好了。我正在使用我所有软件的最新版本,只是在今天建立了我的开发环境。
答案 0 :(得分:0)
跨域请求令人头疼。浏览器允许跨域请求,但设备上的phonegap会将其杀死。我去过那里,并且已经习惯了处理它。尝试在ajax get请求中使用jquery和jsonp。
尝试将<access origin="*" />
添加到config.xml进行测试。
以下是从工作代码中获取的jquery ajax请求的示例
$.ajax({
timeout: 5000,
url: 'https://yourdomain.com/yourfile.php',
dataType: "jsonp",
jsonpCallback: 'yourcallbackfunction',
type: "GET",
crossDomain: true,
data: {'somedata':'your data string'},
error: function(xhrObj,text,errorObj){
if(xhrObj.status !== 200) {
var errorTxt='Error Log: ';
errorTxt=errorTxt+"Error code specific:'"+xhrObj.status+"'\n";
errorTxt=errorTxt+"Error status specific:'"+xhrObj.statusText+"'\n";
errorTxt=errorTxt+"Error code general:'"+text+"'\n";
errorTxt=errorTxt+"Error status general:'"+errorObj.message+"'\n";
console.log(errorTxt);
}
}
});
function yourcallbackfunction(data) {
// do cool stuff here
console.log(data);
}
确保处理服务器响应中的标头,以便响应返回到您的客户端。这是我用来返回数据的示例处理函数。很抱歉,如果php不是您的服务器端脚本语言,但希望您能理解。
`function SendResults($ data){
//允许任何来源
if(isset($ _ SERVER ['HTTP_ORIGIN'])){
header(“Access-Control-Allow-Origin:{$ _SERVER ['HTTP_ORIGIN']}”);
header('Access-Control-Allow-Credentials:true');
标题('Access-Control-Max-Age:86400'); //缓存1天
}
//在OPTIONS请求期间接收访问控制头
if($ _SERVER ['REQUEST_METHOD'] =='OPTIONS'){
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
}
header("content-type: application/json");
$callback = filter_input(INPUT_GET, 'callback', FILTER_SANITIZE_SPECIAL_CHARS);
echo "$callback(" . json_encode($data) . ")";
}`
祝你好运..希望这会对你有所帮助。