Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS$http响应长时间执行_Javascript_Json_Angularjs - Fatal编程技术网

Javascript AngularJS$http响应长时间执行

Javascript AngularJS$http响应长时间执行,javascript,json,angularjs,Javascript,Json,Angularjs,我使用Angular和$http请求从服务器获取数据。它是同一服务器目录中的模拟数据,但在20秒内返回响应。这是一条漫长的路。请求在应用程序启动时执行。 我曾尝试使用jQuery$.ajax执行相同的查询,它在10毫秒内就工作了。但我想摆脱jQuery。 为什么AngularJs$http要花这么长时间 我正在使用Ifeanyi Isitor的示例如何将require.js与angular一起使用。加载我的第一个视图的控制器指向执行查询的服务。在ChromeDevToolsNetwork tra

我使用Angular和$http请求从服务器获取数据。它是同一服务器目录中的模拟数据,但在20秒内返回响应。这是一条漫长的路。请求在应用程序启动时执行。 我曾尝试使用jQuery$.ajax执行相同的查询,它在10毫秒内就工作了。但我想摆脱jQuery。 为什么AngularJs$http要花这么长时间

我正在使用Ifeanyi Isitor的示例如何将require.js与angular一起使用。加载我的第一个视图的控制器指向执行查询的服务。在ChromeDevToolsNetwork traking中,我看到当10毫秒时获取文件所需的时间更少。但是使用console.time在执行查询之前设置它,并在成功时结束它,它可以记录大约20000毫秒的日志。这可能是因为延迟加载吗?但是为什么jQuery工作得很快呢?这是我的服务代码

define(['appModule'], function(app) {
  app.lazy.factory('daoService', ['$http', function($http) {
    var ...
    ...
    getChanges = function(tableName, modifiedSince, callback) {
        console.log('data access time starts');
        console.time('data access time');
        // this works in 20000 ms
        $http.post(tablesUrl[tableName]).success(function(data) {
                console.log("The server returned " + data.length + " changes);
                console.timeEnd('data access time');
                callback(data);
            }).error(function(data){
                console.log(data);
            });

        /* this works in about 10 ms
        $.ajax({
            url: tablesUrl[tableName],
            dataType:"json",
            success:function (data) {
                console.log("The server returned " + data.length + " changes );
                console.timeEnd('data access time');
                callback(data);
            },
            error: function(model, response) {
                console.log(response);
            }
        });*/
    },
我找到了答案。 我是因为angular中的一些东西必须被调用才能被执行。为此,我们需要使用$apply。代码如下:

define(['appModule'], function(app) {
    app.lazy.factory('daoService', ['$http', '$rootScope', function($http, $rootScope) {
    var ...
    ...
    getChanges = function(tableName, modifiedSince, callback) {
        $rootScope.$apply(function(){
                $http.post(tablesUrl[tableName], params).success(function(data) {
                    callback(data);
                }).error(function(data){
                    console.log(data);
                    phoneGapApp.showAlert(data.message);
                });   
            });
    },

更多关于$apply in的信息

通常AngularJS速度非常快。请提供一些代码在没有看到您的代码的情况下不可能知道发生了什么,但Angular不是罪魁祸首。罪魁祸首是您的服务器。不是有棱角的。它也可能是锁在前端的东西。请提供一些代码以帮助添加一些代码结束解释只有在从Angular外部调用
getChanges
时(即从jQuery事件或类似事件调用)才有必要这样做。是的,它是作为访问数据的服务实现的,显然它是从Angular外部调用的。它从控制器调用,以从SQLite获取数据,并从服务器同步数据。在链条的某个地方,它失去了棱角。