2015-05-22 19 views
11

Tôi gặp sự cố trong ứng dụng, khi tôi chạy ứng dụng ở máy chủ cục bộ, hoạt động không có vấn đề và tôi có thể xem danh sách kênh nhưng khi tôi thử kiểm tra ứng dụng thiết bị vật lý nó không hiển thị bất cứ điều gì. Tôi nghĩ rằng vấn đề xuất phát từ phương pháp mà tôi đang sử dụng để gửi dữ liệu json qua http.Góc & Ionic, HTTP Không hoạt động trong thiết bị thực IOS

(function() { 
'use strict'; 

angular.module('testApp').controller('ChannelCtrl', ['$state', 'testApi', ChannelCtrl]); 

function ChannelCtrl($state, testApi) { 
    var vm = this; 

myscreenApi.getChannels().then(function(data){ 
     vm.channels = data; 
    }); 

    vm.selectLeague = function(id){ 
     testApi.setChannelId(id); 
     $state.go("app.video"); 
    } 

}; 
})(); 

và chức năng này của tôi để có được channeldata

function getChannels() { 
     var deferred = $q.defer(), 
      cacheKey = "leagues", 
      ChannelsData = null; 

     if (ChannelsData) { 
      console.log("Found data inside cache", ChannelsData); 
      deferred.resolve(ChannelsData); 
      $window.alert("From Cache"); 
     } else { 
      $http.get("http://example.com/api/videos/getchannels") 
       .success(function(data) { 
        console.log("Received data via HTTP"); 
        self.leaguesCache.put(cacheKey, data); 
        $window.alert("From HTTP"); 
        deferred.resolve(data); 
       }) 
       .error(function(dataerr) { 
        console.log("Error while making HTTP call."); 
        $window.alert("Error baba daram " + dataerr); 
        deferred.reject(); 
       }); 
     } 
     return deferred.promise; 
    } 

khi tôi gửi dữ liệu với JSON.parse(), nó hoạt động đúng.

vm.channels = JSON.parse('[{"Name":"MyScreen News","ID":46,"Thumbnail":"CB46.jpg","Videos":null}]'); 

Tổng thể, tôi đã sử dụng API Web ASP.NET được gửi dữ liệu bằng JSON. Các ứng dụng hoạt động tốt trong máy tính để bàn của chúng tôi tuy nhiên các ứng dụng đang chạy không thể lấy dữ liệu từ máy chủ của chúng tôi. Hơn nữa, khi tôi tiêm dữ liệu trong chương trình trực tiếp nó hoạt động trong cả hai nền tảng. Ngoài tệp cấu hình ionic được trình bày bên dưới:

<content src="index.html"/> 
    <access origin="*"/> 
    <preference name="webviewbounce" value="false"/> 
    <preference name="UIWebViewBounce" value="false"/> 
    <preference name="DisallowOverscroll" value="true"/> 
    <preference name="BackupWebStorage" value="none"/> 
    <feature name="StatusBar"> 
    <param name="ios-package" value="CDVStatusBar" onload="true"/> 
    </feature> 

Đó là tất cả. ;)

+0

Bạn đã thử sử dụng adb logcat để xem lỗi khi khởi chạy ứng dụng của mình chưa? – carton

+0

có, tôi có, không có lỗi – Nima

+0

Chắc chắn là một câu hỏi ngu ngốc nhưng bạn có kết nối internet trên thiết bị thực của mình không? (bạn gọi đây là http://example.com/api/videos/getchannels) – carton

Trả lời

11

Nếu bạn đang sử dụng một trong những phiên bản mới nhất của cordova bạn có thể phải cài đặt cordova plugin whitelist:

cordova plugin add cordova-plugin-whitelist 

Nếu bạn đang sử dụng IIS Express bạn có thể tìm thấy một vài vấn đề.
Tôi đã giải thích chi tiết hơn một số here.

+0

Như tôi đã giải thích trong mã chi tiết của tôi trong config.xml Tôi đã có. ? ; ( – Nima

+0

Nó không quan trọng. Bạn có thể muốn đọc [this] (http://devgirl.org/2015/04/24/apache-cordova-newsflash/) – LeftyX

+0

Đánh dấu phần này là đã giải quyết, chính xác là – artdias90

2

Có chính xác cùng một sự cố khi làm việc trên máy chủ thử nghiệm. Có vẻ như iOS 9 đã thêm một lớp bảo mật vào ứng dụng của họ bằng cách không cho phép ứng dụng kết nối với máy chủ thông qua HTTP thay vì HTTPS.

Để khắc phục điều này, bạn phải thêm This Patch vào tệp info.plist iOS của bạn.

Hãy nhớ rằng giải pháp này là INSECURE và không nên được sử dụng trong các dịch vụ web sản xuất.

0

Tôi gặp vấn đề tương tự. Nếu bạn đang sử dụng cordova cao hơn 4,0 bạn sẽ phải chạy cordova plugin add cordova-plugin-whitelist

Bạn có thể kiểm tra phiên bản cordova bạn bằng cách chạy cordova -v

Chúc mừng Mã hóa.

+0

Tôi đã cài đặt plugin ở trên mặc dù nó là không đi qua và mã của tôi là $ http.get ('http://118.67.249.142/CKC_NEW/c') .then (function (response) { console.log ("Insert") angular.forEach (phản hồi. dữ liệu, hàm (res, key) { var query = "INSERT HOẶC THAY THẾ INTO adminshop1 (shopid, url) VALUES (?,?)"; $ cordovaSQLite.execute (db, truy vấn, [res.shopid, res.url , sau đó (chức năng (res) { nếu (response.data.length == key + 1) { $ rootScope.selectAll(); } }, chức năng (err) {}); }) }); – Raghuram

Các vấn đề liên quan