通过3G呼叫Web服务时离子框架的错误请求

时间:2014-12-24 15:01:47

标签: ios angularjs ionic-framework

我正在使用离子框架开发iOS应用程序,当我尝试使用3G网络调用Web服务时遇到一个问题。

这是我在UserService中的服务:

function getUserStat(user_id){
        var request = $http({ method: "get",
                              url: "http://www.example.com/user.php",
                              params: {
                                action: "stat",
                                user_id:user_id
                            },
                            data: {
                            }
                        });

        return(request.then(handleSuccess, handleError));
    }

function handleError( response ) {

        // The API response from the server should be returned in a
        // nomralized format. However, if the request was not handled by the
        // server (or what not handles properly - ex. server error), then we
        // may have to normalize it on our end, as best we can.
        if (!angular.isObject( response.data ) || !response.data.message) {
            return( $q.reject("An unknown error occurred.") );
        }

        // Otherwise, use expected error message.
        return( $q.reject( response.data.message ) );

    }

    // I transform the successful response, unwrapping the application data
    // from the API response payload.
    function handleSuccess( response ) {
        return( response.data );
    }

getUserStat()函数将返回json。

这是我的控制器

UserService.getUserStat($scope.user_id).then(function(data){
        alert("Result: " + JSON.stringify(data));
    });

在我的控制中我只是展示了json。

我将此代码构建到我的iPhone并通过WIFI网络进行测试,一切正常。如果我更新服务器端,控制器中的UserService.getUserStat将显示更新。但问题是当我在3G网络上测试时,iPhone总是显示从服务器返回的旧json(即使我更改了服务器端数据)。

解决这个问题的任何想法?

谢谢

1 个答案:

答案 0 :(得分:0)

当我尝试将相机照片上传到我的数据服务器时,我遇到了类似的问题。当我在我的本地WIFI上测试应用程序时,它工作得很好但是当我在外面测试它时我注意到它无法上传文件。最终问题是,由于互联网外部速度慢得多,因此应用程序移动到另一个视图而未完成上传操作。

因此,例如,如果您的控制器看起来像这样:

.controller('Ctrl1', function(webService, $scope, $state) {
   UserService.getUserStat($scope.user_id).then(function(data){
       alert("Result: " + JSON.stringify(data));
   });

   $state.go('app.posts');
});

它应该是这样的:

.controller('Ctrl1', function(webService, $scope, $state) {
   UserService.getUserStat($scope.user_id).then(function(data){
       alert("Result: " + JSON.stringify(data));
   })
   .finally(function() {
       $state.go('app.posts');
   });
});