简体   繁体   English

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

[英]how to create synchronous using $http in angular.js?

I am beginner in java script and does not understand how to create synchronous Ajax call using $http object if anybody have idea please guide me, how i can make Ajax call by $http sychronously 我是Java脚本的初学者,如果有人有想法请理解我如何使用$ http对象创建同步Ajax调用,我如何通过$ http进行Ajax调用

my code as follow - 我的代码如下-

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

You can not make a synchronous request using $http service. 您不能使用$ http服务发出同步请求。 It is hard coded to be asynchronous in the service code. 它在服务代码中被硬编码为异步的。 You can, however, make your own synchronous service. 但是,您可以进行自己的同步服务。

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

Here is working jsfiddle: http://jsfiddle.net/zono/uL0e1j3e/18/ 这是正在工作的jsfiddle: http : //jsfiddle.net/zono/uL0e1j3e/18/

Just to say that the synchronous request is a very bad idea. 只是说同步请求是一个非常糟糕的主意。

you can use the promise concept of angular. 您可以使用有角度的诺言概念。 promise provide the synchronous facility. 承诺提供同步工具。 i demonstrate you to by giving the demo example 我通过演示示例向您展示

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

app.controller("ctrl",function($scope,$q,$timeout){ app.controller(“ ctrl”,function($ scope,$ q,$ timeout){

var task1 = $q.defer();
task1.promice.then(function(value){
       // write a code here for your task 1 success
} ,function(value){
       // write a code here for your task 1 error
});

var task2 = $q.defer();
task2.promice.then(function(value){
      // write a code here for your task 2 success
} ,function(value){
     // write a code here for your task 2 error
});

$q.all([task1.prpmice,task2.promice])
     .then(function(){
             // write a code which is executed when both the task are completed
    } ,function(){
            // write a code which is executed when some of the task are rejected
});

} }

the above code will help you to understand the promice concept of angular 上面的代码将帮助您了解angular的promice概念

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM