2013-08-30 47 views
2

我在rails应用上使用了angularjs。我想制作一个分页服务器端数据的搜索表单。

这里是我的形式:

<input type="text" class="search-query" placeholder="Search Products" ng-model="search_terms" />

我的轨控制器可以接受JSON或HTML请求:

def index 
    # .... 
    respond_to do |format| 
    format.json { 
     # ... 
    } 
    format.html { 
     # ... 
    } 
    end 
end 

这里是我的角度控制器。出于某种原因,$ http服务只能返回rails默认的html响应,而不是json响应。

$scope.$watch('search_terms',function(newValue,oldValue){ 
    var query = newValue; 

    $http.get('/products',{params:{search_terms:query}, responseType:'json'}).success(function(data) { 
    // do something 
    }); 

}); 

如果我用这个jQuery.get I DO找回所需的JSON响应,那么为什么角给我的html?

jQuery.get('/products',{search_terms:query},function(data){ 
    console.log(data); 
    }, 'json') 

我检查网络报头和角呼叫和呼叫的jQuery之间的主要区别是,角不设置X-请求-随着头为“的XMLHttpRequest”?

如果我添加,那么我可以得到它的工作。

$http.get('/products',{params:{search_terms:query}, responseType:'json', 'headers':{'X-Requested-With':'XMLHttpRequest'}}).success(function(data) { 
    // do something 
    }); 

但是对Angular来说,新手并不知道这是否是解决此问题的正确方法。感觉有点笨重,每次都必须这样做。有没有更好的方法,或者这是你如何使用Angular和Rails?

+0

可能重复失败的升级从1.1.0到1.1.1后](http://stackoverflow.com/questions/15811062/angular-js-fails-after-upgrade-from-1-1-0-to-1-1-1) – zsong

+0

https://github.com/angular /angular.js/issues/1004 – zsong

回答

4

我遇到了同样的事情,并因此而感到沮丧。我的第一个解决方案是一个有点警察出来的,我结束了这种宝石会:

https://github.com/FineLinePrototyping/angularjs-rails-resource

但有一个多一点的经验之后,我发现它与角度没有设置正确的头做。

angular.module('yourmodule').run(['$http', function($http) { 
    $http.defaults.headers.common['Accept'] = 'application/json'; 
    $http.defaults.headers.common['Content-Type'] = 'application/json'; 
}]); 

参考:http://angulartutorial.blogspot.com/2014/05/set-headers-for-all-http-calls-in.html

记住的情况也存在于request.xhr

https://github.com/rails/rails/issues/16444

[角JS的