2014-11-13 14 views
5

Webapp yapıyorum ve ilk defa açıyorum. Dün bir API'den veri almayı denedim ancak çapraz kaynaklı kaynak kısıtlamalarının Açısal nedeninde çalışmayacak. Lucky, json tarihini PHP'de basit bir CURL isteği üzerine alabilirim. Bu yüzden şimdi buradayım. Bir PHP Değişkeninde JSON Verilerine sahibim ve bu verileri Açısal Uygulamamda kullanmak istiyorum. Bunu nasıl başarabilirim? Verileri doğrudan açısal olarak iletmenin bir yolu var mı? Ya da php ile bir json dosyası oluşturmalı ve sonra da benim funcion'uma yüklemeliyim? Hangi önerileriniz var?Bir php değişkenini açısal açıya geçirme

$ scope.post'ları php değişkeninin $ içeriğinin içeriği ile doldurmak istiyorum.

<?php 


     /* gets the data from a URL */ 
     function get_data($url) { 
     $ch = curl_init(); 
     $timeout = 5; 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
     $data = curl_exec($ch); 
     curl_close($ch); 
     return $data; 
     } 

     $returned_content = get_data('http://fingerzeig.ch/api/agenda/list'); 
     $content = json_decode($returned_content); 
     //print_r ($content); 

     //Get first title 
     //$firstitle = $content[0] -> ID; 

     //print_r($firstitle); 



     ?> 

Eğik kod:

//MYAPP 

var app = angular.module("MyApp", []); 


app.controller("PostsCtrl", function($scope, $http) { 
    $http.get(' WHAT SHOULD GO HERE? '). 
    success(function(data, status, headers, config) { 
    console.log("success!"); 
    console.log(data); 
     $scope.posts = data; 
    }). 
    error(function(data, status, headers, config) { 
     // log error 
    }); 
}); 
+0

Angular uygulamanıza erişim sağlamak için API üzerinde kontrolünüz var mı? –

+0

@SteveAdams Maalesef kontrolüm yok. Bu yüzden, buradaki php değişkenindeki web sitemdeki verilerim var. Onu ve her şeyi ekleyebilirim. Ama benim açısal uygulamasında nasıl çalışırım? – elpeyotl

cevap

9

Sen sağlayabilir ve apache ve php kullanarak son nokta kendi sunucusundan bu verileri almak için bir

$http.get('func').then(function(data) { 
//do stuff 
}); 

bir php işlevine çağrı ya da sadece kapsamına tıkmak:

$http.get('/endpoint', function() { ... }); 

Ayrıca DOM'a 'bootstrapping' verileri olarak da adlandırılan bir şeyler de yapabilirsiniz. Bu iyi çalışır - Genellikle tek bir sayfa uygulamasının ilk sayfa yüklemesinin ilk verileri beklemesini gerektirmediğinden emin olmak için yaparım.İlk sayfa yüklemesi için her şey sunucuda oluşturulur ve uygulamanın daha fazla istekte bulunmadan toplanması için sayfaya yerleştirilir:

Bunu yapmak için, pencerede veya global kapsamda bir koleksiyon oluşturabilirsiniz:

app.controller("PostsCtrl", function($scope) { 
    var posts = window.myPostData; 
}); 

: daha sonra app sonra

window.myPostData = "<?php echo $data; >"; 

, bunu böyle erişilebilir olacak, böylece pencere nesnesi (veya herhangi bir genel değişken) her zaman tarayıcıda kullanılabilir olmasını bekliyoruz tipik edebilirsiniz Bununla birlikte, muhtemelen freslere erişmek isteyebilirsiniz muhtemelen böyle bir şey denemek istiyorum böylece h veri, hem de:

// If $data is empty, set myPostData to false. 
window.myPostData = <?php echo empty($data) ? 'false' : $data; >; 

... 

app.controller("PostsCtrl", function($scope, $http) { 
    var posts = window.myPostData; 

    // Set myPostData to false so future use of this controller during this 
    // request will fetch fresh posts. 
    window.myPostData = false; 

    // Now if we didn't bootstrap any posts, or we've already used them, get them 
    // fresh from the server. 
    if (!posts) { 
     $http.get('/endpoint', function() { 
      ... 
     }); 
    } 
}); 

Zihin Eğer apache ve php kullanarak bir bitiş noktası nasıl kurulacağı anlayışı yoksa sen, sen sopa isteyeceksiniz Sadece verileri pencereye veya global bir değişkene önyükleme ile. İdeal değil, ama işe yarayacaktı.

+0

Bu açık açıklama için teşekkürler. Bu bana yardımcı olabilir! – elpeyotl

+0

Rica ederim. - Çok muğlak bir şey varsa daha fazla yardım istemekte çekinmeyin. –

+0

aslında sorun burada küresel değişkenler iyi bir fikir değil, ben özel değişken olarak atamak istiyorum, bunun hakkında herhangi bir fikir? –

0

Zaten JSON verilerini alıyoruz beri sadece çıkış JSON veri

İşte php kod. Json_decode yapmaya gerek yok.

Dolayısıyla, sadece echo $returned_content

Düzenleme: Eğer Açısal kodunda $http.get(' WHAT SHOULD GO HERE? ') var

kısım PHP sayfanın göreli URL'ye işaret etmelidir. Örneğin. PHP sayfa http://server.com/webapp/get_data.php de erişilmesi durumunda daha sonra açısal en iyi uygulama ama ya eğer $http.get('/webapp/get_data.php')

+0

Bunu biliyorum. Bu verilerle web sitemde php ile çalışabilirim. Ancak bu verileri açısal uygulamasında kullanmak için nasıl alabilirim? – elpeyotl

+0

Düzenlenmiş cevabıma bakın – creanium

0

Sadece emin değilim böyle kapsamına bunu zorlayacağını olurdu ... Ya da açısal denetleyicisi olabilir

<input ng-model="myContent" value="<?php echo $returned_content?>"/> 
4

Yardımlarınız için herkese teşekkür ederim. Çalışıyor ve çözüm çok basitti.

PHP'nin döndürülen içeriğini alan Javascript'te bir değişken oluşturdum. Benim ng-tekrarında şimdi bu verilere erişebilir

//MYAPP 

var app = angular.module("MyApp", []); 

app.controller("PostsCtrl", function($scope) { 
    $scope.posts = thedata; 
    console.log(thedata); 
}); 

:

var thedata = <?php echo $returned_content;?>; 

Sonra benim açısal uygulama dosyasında bu değişkeni koydu.

<body ng-app="MyApp"> 
    <div ng-controller="PostsCtrl"> 
    <ul ng-repeat="post in posts"> 
     <li>{{post.ID}}</li> 
    </ul> 
    </div> 
</body> 

Tatlı çalışıyor! Çok basit bir çözüm.

İlgili konular