Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 如何在angular.js中使用$http创建同步?_Javascript_Ajax_Angularjs - Fatal编程技术网

Javascript 如何在angular.js中使用$http创建同步?

Javascript 如何在angular.js中使用$http创建同步?,javascript,ajax,angularjs,Javascript,Ajax,Angularjs,我是java脚本的初学者,不知道如何使用$http对象创建同步Ajax调用。如果有人有想法,请指导我,如何通过$http同步进行Ajax调用 我的代码如下- var AjaxModule = angular.module('AjaxModule',[]); AjaxModule.controller('AjaxController',function($scope,$http){ var path ="http://localhost/services_ajax/"; var s

我是java脚本的初学者,不知道如何使用$http对象创建同步Ajax调用。如果有人有想法,请指导我,如何通过$http同步进行Ajax调用

我的代码如下-

var AjaxModule = angular.module('AjaxModule',[]);
AjaxModule.controller('AjaxController',function($scope,$http){
    var path ="http://localhost/services_ajax/";
    var serviceName = 'customers'; 
    var response = $http.get(path+serviceName);
    response.success(function(data){
        $scope.list = data;
    });
});

您不能使用$http服务发出同步请求。在服务代码中硬编码为异步。但是,您可以创建自己的同步服务

var myApp = angular.module('myApp', []);

myApp.service('synchronousService', [function () {
    var serviceMethod = function (url) {
        var request;
        if (window.XMLHttpRequest) {
            request = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            throw new Error("Your browser don't support XMLHttpRequest");
        }

        request.open('GET', url, false);
        request.send(null);

        if (request.status === 200) {
            return request.responseText;
        }
    };
    return serviceMethod;
}]);

myApp.controller('AppCtrl', function ($scope, synchronousService) {
    var url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22AAPL%22%29&env=store://datatables.org/alltableswithkeys";
    alert(synchronousService(url));
});
以下是JSFIDLE的工作原理:


只是说同步请求是一个非常糟糕的主意。

您不能使用$http服务发出同步请求。在服务代码中硬编码为异步。但是,您可以创建自己的同步服务

var myApp = angular.module('myApp', []);

myApp.service('synchronousService', [function () {
    var serviceMethod = function (url) {
        var request;
        if (window.XMLHttpRequest) {
            request = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            throw new Error("Your browser don't support XMLHttpRequest");
        }

        request.open('GET', url, false);
        request.send(null);

        if (request.status === 200) {
            return request.responseText;
        }
    };
    return serviceMethod;
}]);

myApp.controller('AppCtrl', function ($scope, synchronousService) {
    var url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22AAPL%22%29&env=store://datatables.org/alltableswithkeys";
    alert(synchronousService(url));
});
以下是JSFIDLE的工作原理:


只是说同步请求是一个非常糟糕的主意。

您不能使用$http服务发出同步请求。在服务代码中硬编码为异步。但是,您可以创建自己的同步服务

var myApp = angular.module('myApp', []);

myApp.service('synchronousService', [function () {
    var serviceMethod = function (url) {
        var request;
        if (window.XMLHttpRequest) {
            request = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            throw new Error("Your browser don't support XMLHttpRequest");
        }

        request.open('GET', url, false);
        request.send(null);

        if (request.status === 200) {
            return request.responseText;
        }
    };
    return serviceMethod;
}]);

myApp.controller('AppCtrl', function ($scope, synchronousService) {
    var url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22AAPL%22%29&env=store://datatables.org/alltableswithkeys";
    alert(synchronousService(url));
});
以下是JSFIDLE的工作原理:


只是说同步请求是一个非常糟糕的主意。

您不能使用$http服务发出同步请求。在服务代码中硬编码为异步。但是,您可以创建自己的同步服务

var myApp = angular.module('myApp', []);

myApp.service('synchronousService', [function () {
    var serviceMethod = function (url) {
        var request;
        if (window.XMLHttpRequest) {
            request = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            throw new Error("Your browser don't support XMLHttpRequest");
        }

        request.open('GET', url, false);
        request.send(null);

        if (request.status === 200) {
            return request.responseText;
        }
    };
    return serviceMethod;
}]);

myApp.controller('AppCtrl', function ($scope, synchronousService) {
    var url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22AAPL%22%29&env=store://datatables.org/alltableswithkeys";
    alert(synchronousService(url));
});
以下是JSFIDLE的工作原理:


只是说同步请求是一个非常糟糕的主意。

您可以使用promise的概念。 承诺提供同步设施。 我通过演示示例向您演示

var-app=angular.module(“myApp”,[])

应用程序控制器(“ctrl”,函数($scope,$q,$timeout){

}


以上代码将帮助您理解promice angular的概念

您可以使用promise angular的概念。 承诺提供同步设施。 我通过演示示例向您演示

var-app=angular.module(“myApp”,[])

应用程序控制器(“ctrl”,函数($scope,$q,$timeout){

}


以上代码将帮助您理解promice angular的概念

您可以使用promise angular的概念。 承诺提供同步设施。 我通过演示示例向您演示

var-app=angular.module(“myApp”,[])

应用程序控制器(“ctrl”,函数($scope,$q,$timeout){

}


以上代码将帮助您理解promice angular的概念

您可以使用promise angular的概念。 承诺提供同步设施。 我通过演示示例向您演示

var-app=angular.module(“myApp”,[])

应用程序控制器(“ctrl”,函数($scope,$q,$timeout){

}




上面的代码将帮助您理解promice angular的概念

为什么您认为您需要一个同步jax调用?$http服务返回一个承诺,因此我不认为您可以将其配置为进行同步调用……但是,我想不出有哪种情况我希望我的应用程序在得到响应之前停止在server.becouse中,我通过在html中迭代$scope.list设置了DataTable行,所有html都正确生成,但是DataTable搜索在生成表行之前不作为DataTable调用,因为异步ajax请求,所以在加载数据之前禁用搜索。为什么您认为需要同步jax调用?$http服务返回这是一个承诺,因此我不认为您可以将其配置为进行同步调用…但是,我想不出有哪一种情况我希望我的应用程序在收到服务器响应之前停止。因为我已经通过在html中迭代$scope.list设置了DataTable行所有html生成都正确,但是DataTable搜索不能作为DataTable运行在生成表行之前调用异步ajax请求,因此在加载数据之前禁用搜索。为什么您认为您需要一个同步jax调用?$http服务返回一个承诺,因此我不认为您可以将其配置为进行同步调用…但是,我想不出有哪种情况需要我的应用程序停止,直到收到服务器的响应。因为我已经通过在html中迭代$scope.list设置了DataTable行。所有html生成都正确,但是DataTable搜索在生成表行之前不作为DataTable调用工作,这是由于异步ajax请求,所以在加载数据之前禁用搜索。为什么您认为需要同步jax调用?$http服务返回一个承诺,因此我不认为您可以将其配置为进行同步调用……但是,我想不出有哪一种情况需要我的应用程序停止,直到我得到服务器的响应。因为我通过在html中迭代$scope.list设置了DataTable行所有html都正确生成,但DataTable sear由于异步ajax请求,ch在生成表行之前不作为dataTable调用工作,因此在加载数据之前禁用搜索。我不确定此服务是否能在所有不同的浏览器上正常工作。这只是一个示例。我将改进答案。不过,这在IE9中不起作用(例如)。这里真正的问题是OP需要理解Angular不提供该选项是有原因的,这是Angular应用程序旨在使用异步函数和承诺。我从来没有说过这对旧IE有效。没关系。我改进了它。我已经说过同步请求是一个非常糟糕的主意。编辑:这是为什么否决票?既然Angular确实支持IE9,我想你至少应该提到这一点。我不确定这项服务是否能在所有不同的浏览器上正常工作。这只是一个例子。我会改进答案。不过,这对IE9不起作用(例如)。这里真正的问题是OP需要理解Angular不提供该选项是有原因的,这是Angular应用程序旨在与异步函数和承诺一起工作。我从来没有说过这将适用于旧IE。没关系。我改进了它。我已经说过同步