导读:AngularJS提供了一个内置Service $q,它提供了一种承诺/延后(promise/deferred),可以保证我们的调用代码一定能够拿到数据。当然,我们...
AngularJS提供了一个内置Service $q,它提供了一种承诺/延后(promise/deferred),可以保证我们的调用代码一定能够拿到数据。当然,我们可以猜到,最后去服务器取数据的方式肯定是异步的。只不过这个服务提供了表面上是同步访问的API,当数据获取成功之后,自动将数据提供给调用的代码。
js 代码如下:
- <script type="text/javascript" src="{$dj_path}dejia_js/Angular.min.js"></script>
- <script type="text/javascript">
- $("#inputfile").change(function(){
- var file = document.getElementById("inputfile").files[0];
- var fileer = new FileReader();
-
- var filee = document.getElementById("inputfile").value;
- var isnext = false;
- var fileend = filee.substring(filee.indexOf("."));
- var filetypes =[".jpg",".png",".gif",".jpeg"];
- for(var i =0; i<filetypes.length;i++){
- if(filetypes[i]==fileend){
- isnext = true;
- break;
- }
- }
- if(!isnext){
- alert("只允许上传jpg|gif|png|jpeg格式的图片");
- return false;
- }
-
- fileer.readAsDataURL(file);
- fileer.onload = function(){
- var result = document.getElementById("fileimg");
- $("#addbg").fadeOut();
- result.innerHTML = '<img src="' + this.result +'" ng-init="tasks.myimg = ' + this.result +'" alt="" />';
- }
- });
-
-
- var app = angular.module('todolist',[]);
- app.config(['$interpolateProvider', function($interpolateProvider) {
- $interpolateProvider.startSymbol('{[');
- $interpolateProvider.endSymbol(']}');
- }]);
-
-
-
- app.factory('UserInfo', ['$http', '$q', function ($http, $q) {
- return {
- query : function(rest) {
- var deferred = $q.defer();
- $http({method: 'POST', url: 'consignment.php?act=img_pro',data:rest}).
- success(function(data, status, headers, config) {
- deferred.resolve(data);
- }).
- error(function(data, status, headers, config) {
- deferred.reject(data);
- });
- return deferred.promise;
- }
- };
- }]);
-
-
- app.controller('TaskCtrl',['$scope', 'UserInfo', function ($scope, UserInfo) {
-
- $scope.tasks={biaoti:'',jiage:'',fenlei:'',myimg:'',url:'',miaoshu:''};
- $scope.lists=[];
- $scope.add=function(){
- $scope.error="";
-
-
- if(isNaN($scope.tasks.jiage)){
- $scope.error="价格必须为数字";
- }else{
- if($scope.tasks.biaoti == '' || $scope.tasks.jiage == ''|| $scope.tasks.fenlei == ''|| $scope.tasks.miaoshu == ''){
- $scope.error="列表中带 * 号的为必填项";
- }else{
-
- var imgasdd = $("#fileimg img").attr("src");
- if(imgasdd == null){
- imgasdd = "images/no_pictureco.gif";
- $scope.tasks.myimg = imgasdd;
- $scope.lists.push($scope.tasks);
- $("#fileimg img").attr("src","{$dj_path}dejia_images/addbg.gif");
- $scope.tasks={biaoti:'',jiage:'',myimg:'',fenlei:'',url:'',miaoshu:''};
- }else{
- popCenterWindow(); //显示等待框
-
-
- var promise = UserInfo.query(imgasdd);
- promise.then(function(data) {
- $scope.tasks.myimg = data;
- $scope.lists.push($scope.tasks);
- $("#fileimg img").attr("src","{$dj_path}dejia_images/addbg.gif");
- $scope.tasks={biaoti:'',jiage:'',myimg:'',fenlei:'',url:'',miaoshu:''};
- closeWindow();
- }, function(data) {
- $scope.user = {error: '用户不存在!'};
- });
-
-
-
- }
-
- }
- }
- }
-
-
- }]);
php代码如下:
- $rawpostdata = file_get_contents("php://input"); //获取AngularJS post过来的数据
-
- require(ROOT_PATH .'includes/cls_image.php');
- $cls_image = new cls_image();
- if($rawpostdata){
- if (preg_match('/(?<=\/)[^\/]+(?=\;)/',$rawpostdata,$pregR)){
- $streamFileType ='.' .$pregR[0];
- }
- $streamFileRand ='y'. date('YmdHis').rand(1000,9999);
- $dir = UPLOAD.$user_id.'/consi/';
-
- if (!file_exists($dir))
- {
- if (!make_dir($dir))
- {
- exit('-1');
- }
- }
- $streamFilename = $dir."".$streamFileRand .$streamFileType;
-
- preg_match('/(?<=base64,)[\S|\s]+/',$rawpostdata,$streamForW);
- if (file_put_contents($streamFilename,base64_decode($streamForW[0]))===false){
- exit('-1');
- }
-
-
- $mix = $cls_image->make_thumb($streamFilename,360,360,$dir);
- exit($mix);
- }else{
- exit('-1');
- }