Ajax请求可在浏览器上运行,但不能在Android设备上运行 [英] Ajax request works on browser but not on Android device

查看:102
本文介绍了Ajax请求可在浏览器上运行,但不能在Android设备上运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用Cordova制作一个简单的移动应用程序.当我在浏览器中对其进行测试时,我拥有的代码可以完美运行,但在Android手机上进行测试时,它会忽略成功功能,并直接打印db.js中的错误消息.

I am making a simple mobile app with Cordova. The code I have works perfectly when I test it in a browser but it ignores the success function when test on an Android phone and prints directly the error message from db.js.

这是相关的index.html

Here is the relevant index.html

 <body>
    <div class="app">
        <h1></h1>
        <div id="deviceready" class="blink">
            <div>
                <div id="output"></div>
            </div>
        </div>
    </div>
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
    <script type="text/javascript" src="js/db.js"></script>
</body>

带有ajax函数的db.js

db.js with the ajax function

$(document).ready(function() {
  $(document).bind('ready', function() {
   var output = $('#output');

   $.ajax({
    url: 'http://domainName/server/folder/db.php',
    dataType: 'jsonp',
    jsonp: 'jsoncallback',
    timeout: 5000,
    success: function(data, status){
       $.each(data, function(i, item){
       var cards = '<h1>' + item.title + '</h1>' + item.body 
       + '<br>' + '<img src="img/' + item.slug + '.jpg"' + '>' + '<br>' ;

       output.append(cards);

    });
  },
  error: function(){
      output.text("There was an error loading the data.");  
  }
 });
 });
 });

db.php

<?php
   header('Content-type: application/json');

   $host = 'hostname';
   $dbname = 'database';
   $user = 'username';
   $pass = 'passoword';

   $jsoncallback = isset($_GET['jsoncallback'])? $_GET['jsoncallback'] : "";

   $con = mysql_connect($host, $user, $pass) or die("Could not connect: " . mysql_error());
   mysql_select_db($dbname, $con);

   $sql = "SELECT * FROM cards";
   $result = mysql_query($sql) or die("Query error: " . mysql_error());

   $records = array();

   while($row = mysql_fetch_assoc($result)) {
        $records[] = $row;
   }

   mysql_close($con);
        echo $jsoncallback . '(' . json_encode($records) . ');';

所有域都列入白名单:

<access origin="*" />

Android清单中的权限:

Permissions in Android manifest:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

有什么想法吗?

推荐答案

我通过使用Phonegap(代替Cordova)构建了一个新项目来使其工作.否则,完全相同的代码.仍然不知道为什么它不能与Cordova一起使用.

I made it work by building a new project with Phonegap (instead of Cordova). Exactly the same code otherwise. Still no idea why it wouldn't work with Cordova.

这篇关于Ajax请求可在浏览器上运行,但不能在Android设备上运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆