2016-08-28 77 views
1

從Web服務返回我的json數據的Angularjs服務在返回語句中創建錯誤未捕獲的語法錯誤意外標識符。angularjs服務未捕獲的語法錯誤意外標識符

這是我angularjs服務 -

 app.factory('GetProjectService', function ($http, $q) { 
            return { 
               getProject: function(str) { 
               $http({ 
        method: 'GET', 
        url: 'http://localhost:19342/api/Search/GetAllProjects', 
        headers: { 'Content-Type': 'application/json' } 
        }).then(function(response) { 
                        if (typeof response.data === 'object') { 
                            return response.data; 
                        } else { 
                            return $q.reject(response.data); 
                        } 
                    }, function(response) { 
                        return $q.reject(response.data); 
                    }); 
               } 
        }; 

    }); 

回答

1

$ Q是不是在你的代碼正確使用。請參考下面的代碼片段 -

app.factory('GetProjectService', function ($http, $q) { 
     return { 
      getProject: function(str) { 
      var deferred = $q.defer(); 

      $http({ 
        method: 'GET', 
        url: 'http://localhost:19342/api/Search/GetAllProjects', 
       headers: { 'Content-Type': 'application/json' } 
        }).then(function(response) { 
         deferred.resolve(response.data); 
        }, function(response) { 
         deferred.reject(response.data); 
        }); 
      return deferred.promise; 
      } 
    }; 

}); 

但當你$ HTTP,也沒有必要使用$ Q $作爲HTTP返回承諾OBJ。下面是在服務使用$ HTTP的另一種方式 -

app.factory('GetProjectService', function ($http, $q) { 
     return { 
      getProject: function(str) { 

      return $http({ 
        method: 'GET', 
        url: 'http://localhost:19342/api/Search/GetAllProjects', 
       headers: { 'Content-Type': 'application/json' } 
        }); 

      } 

    }; 

}); 
+0

'$ q.reject'是'$ q'服務的有效方法。它創建了一個被指定值拒絕的承諾。有關更多信息,請參見[AngularJS $ q API參考 - $ q.reject](https://docs.angularjs.org/api/ng/service/$q#reject) – georgeawg

+0

是的,它返回承諾,但代碼是以getProject函數沒有返回任何東西的方式編寫,我們應該通過上述任何一種方式返回promise。 –

0

getProject缺少一個return聲明。

app.factory('GetProjectService', function ($http, $q) { 
    return { 
     getProject: function getProject(str) { 
      //RETURN http promise 
      return $http({ 
       method: 'GET', 
       url: 'http://localhost:19342/api/Search/GetAllProjects', 
       headers: { 'Content-Type': 'application/json' } 
      }).then(function onSuccess(response) { 
       if (typeof response.data === 'object') { 
        return response.data; 
       } else { 
        return $q.reject(response.data); 
       } 
      }, function onReject(response) { 
       return $q.reject(response.data); 
      }); 

     } 
    }; 

}); 

在函數層次結構的每個級別都需要有return語句。工廠需要一個return語句,getProject函數需要一個return語句,而onSuccessonReject函數需要一個returnthrow語句。

相關問題