使用 Angularjs 和 php 将 PhoneGap 应用程序连接到服务器上的 MySql 数据库


Connect PhoneGap App to MySql Database on the server with Angularjs and php?

嗨,我正在尝试使用Phonegap应用程序从服务器上的MySQL数据库中获取数据。我正在服务器上调用一个 php 文件,它给了我 JSON。我正在尝试对服务器上的 php 文件进行 ajax 调用,我想将 json 数据保存在 angular 的$scope中,以便我可以在我的 HTML 中使用它。我的脚本如下所示:

     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 文件中的$scope数据:

<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}]);

添加监视方法以检测模型中的变化"帖子",如下所示:

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

有关如何以角度执行 JSONP 请求,请参阅此答案。AngularJS 1.2 跨源请求仅支持 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.
    });
相关文章: