Phonegap中的Ajax无法正常工作

时间:2014-11-07 22:56:07

标签: ajax angularjs cordova

我知道Stack Overflow已经多次解决这个问题,但没有一个解决方案对我有用。

在设备上运行时,我无法在我的phonegap应用程序中获得任何ajax请求(Android 4.4.2),但桌面浏览器的一切正常。

首先我尝试了AngularJS $ http

然后我尝试了jQuery .get

然后我尝试了原始xhr

在所有情况下,请求立即失败,没有响应。我尝试过从我自己的服务器,谷歌服务器和其他地方请求数据,都是一样的。我已尝试在config.xml中将我的域列入白名单,但形式仍然无效。我甚至打开了控制台,并手动创建了一个XHR,并尝试对它进行GET,同样的事情发生了。请求立即失败。如果有人能帮助我,那就太好了。我正在使用我所有软件的最新版本,只是在今天建立了我的开发环境。

1 个答案:

答案 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) . ")";

}`

祝你好运..希望这会对你有所帮助。