2014-03-31 98 views
0

嗨我想從我的服務器上的MySQL數據庫與Phonegap應用程序獲取數據。我打電話給服務器上的PHP文件,這是讓我回JSON。我試圖對服務器上的該PHP文件執行ajax調用,並且我想將json數據保存在角度的$ scope中,以便可以在我的HTML中使用它。我的腳本是這樣的: 使用Angularjs和php將PhoneGap App連接到服務器上的MySql數據庫?

 function PostsCtrlAjax($scope, $http) 

    { 

     var output2 = $('#output2'); 
     $.ajax({ 
       url: 'http://myWebsiteMySQL.ch/landmarks.php', 
       dataType: 'jsonp', 
       jsonp: 'jsoncallback', 
       timeout: 5000, 
       success: function(data, status){ 

         $scope.posts = data; 
       }, 
       error: function(){ 
       output2.text('There was an error loading the data.'); 
       } 
       }); 

    } 

    </script> 

那麼我要訪問的$範圍數據在HTML文件中像這樣:

<div id="ng-app" ng-app ng-controller="PostsCtrlAjax"> 
     <div ng-repeat="post in posts" class='postBody'> 
      <div>{{post.id}}</div> 
      <div>{{post.name}}</div> 
     </div> 
</div> 

,但我看不到任何數據。我究竟做錯了什麼? 我很感激任何幫助。自2天以來我試圖解決這個問題。在服務器上

我的PHP文件看起來像這樣:

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

$server = "localhost"; 
$username = "xx"; 
$password = "xx"; 
$database = "xx"; 

$con = mysql_connect($server, $username, $password) or die ("Could not connect: " . mysql_error()); 
mysql_select_db($database, $con); 

$sql = "SELECT id, l_name AS name, l_lat AS latitude, l_long AS longitude, l_image AS bild FROM landmarks ORDER BY l_name"; 
$result = mysql_query($sql) or die ("Query error: " . mysql_error()); 

$records = array(); 

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

mysql_close($con); 

echo $_GET['jsoncallback'] . '(' . json_encode($records) . ');'; 
?> 

的數據,是發回的是:

([{"id":"14","name":"Fashion_Coupons","latitude":"9.000000000000","longitude":"9.000000000000","bild":null},{"id":"13","name":"Travel_Coupons","latitude":"3.000000000000","longitude":"4.000000000000","bild":"TopTrendsProgressbar.png"},{"id":"31","name":"Travel_Coupons","latitude":"222.000000000000","longitude":"23212.000000000000","bild":null}]); 

回答

0

看到這個答案怎麼辦 - 在角度JSONP請求。 AngularJS 1.2 cross origin requests are only supported for HTTP

請注意,文檔說JSONP URL必須包含字符串JSON_CALLBACK。 http://code.angularjs.org/1.1.5/docs/api/ng。$#HTTP JSONP

$http.jsonp('http://myWebsiteMySQL.ch/landmarks.php?callback=JSON_CALLBACK') 
    .success(function (data) 
    { 
     $scope.posts = data; 
    }); 

您可以添加一個錯誤回調,看是否包含任何有用的信息。在.success回調後鏈接一個.error。爲模型中檢測到變化「的帖子」,像這樣

$http.jsonp('http://myWebsiteMySQL.ch/landmarks.php') 
    .success(function (data) { ... }) 
    .error(function(data, status, headers, config) { 
     // called asynchronously if an error occurs 
     // or server returns response with an error status. 
    }); 
+0

我試過,但它似乎它沒有做成功。當我在$ scope.posts = data之前提醒消息時;它不會提醒。所以我認爲這是失敗的。我需要用CORS做些什麼嗎? – user3216026

+0

你的PHP實際上是否返回一個JSONP有效載荷?加入 – BenCr

+0

我不確定。我是這個領域的新手,我剛剛使用服務器上的php文件更新了我的代碼。我現在使用$ http.get嘗試它,它正在進入成功功能,但$ scope.posts = data仍然無法使用{{post.id}}調用 – user3216026

1

添加觀察方法:

$scope.$watch('_rows', function() { 
    $scope.items = $scope.posts; 
}); 
相關問題