2015-09-02 3 views
0

Я делаю простое мобильное приложение с Кордовой. Код, который я отлично работаю, когда я тестирую его в браузере, но игнорирует функцию успеха при тестировании на телефоне Android и выводит непосредственно сообщение об ошибке из db.js.Запрос Ajax работает в браузере, но не на устройстве Android

Вот соответствующий 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> 

db.js с функцией АЯКС

$(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 манифеста:

<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" /> 

Любые идеи?

+0

Вы пытались напечатать сообщение об ошибке: 'function (e) { output.text (" Ошибка: "+ e); } '? – lifeisfoo

+0

Да: 'error: function() {output.text (" Ошибка при загрузке данных. ")};' Распечатывает его на экране устройства. Хотя функция успеха выполняется в браузере. – liharts

+0

В кордове вы должны дождаться события 'deviceready' перед любыми действиями. См. Это: http://stackoverflow.com/a/32351495/3340702 – lifeisfoo

ответ

0

Пробовали ли вы использовать код внутри deviceready? Предположим, что ваш начальный индексный файл html выглядит, как показано ниже,

<html> 
<head> </head> 
<body onload="onBodyLoad()" > 
</body> 
</html> 

и ваш файл сценариев выглядит ниже.

<script> 
function onBodyLoad() { 
    document.addEventListener("deviceready", onDeviceReady, false); 
} 
function onDeviceReady() { 
// do your thing here! 
} 
</script> 
+0

Deviceready запускается в начале приложения, например [this] (https://github.com/apache/cordova-app-hello-world/blob/ ведущий/WWW/JS/index.js). Я действительно поставил код jquery под bindEvents (в index.js) на всякий случай, но получил те же результаты: скрипт успешно выполняется в браузере, безуспешно на устройстве. – liharts

0

Я заработал это, построив новый проект с помощью Phonegap (вместо Cordova). Точно такой же код в противном случае. По-прежнему не знаю, почему это не с Кордовой.

Смежные вопросы