我正在尝试将API路由传递给rails,以便服务器执行调用而不是客户端。当我尝试这样做时,我找不到404。当我将此路由传递给方法时,它可以从控制台找到它。但是不是来自ajax调用。这是我的控制器方法:
def identification
@link = params[:link]
@response = MotorClient.new.response_from_path(@link)
render json: @response
end
这是我的路线:
get '/identification/:link', to: 'vehicles#identification', on: :collection
这是我的ajax:
handleRoute: function (e) {
this.handleChange(e);
e.preventDefault();
var options = e.target.options;
var route = "";
for (var i = 0, l = options.length; i < l; i++) {
if (options[i].selected) {
route = (options[i].dataset.route);
console.log(route)
$.ajax({
type: 'get',
url: '/vehicles/identification/',
dataType: 'json',
data: {"link":encodeURIComponent(route)},
success: function (data) {
this.props.getMakes(data);
}.bind(this),
})
}
}
},
当我在console.log中获取路径时,我得到了正确的字符串&#34; / v1 / Information / YMME / Years / 2012 / Makes / 56 / Models&#34;就像我从rails控制台说的那样它可以工作,但是我无法正确获取参数这是我通过ajax调用时在javascript控制台上得到的:
GET http://localhost:3000/vehicles/identification/?link=%252Fv1%252FInformation%252FYMME%252FYears%252F2012%252FMakes 404 (Not Found)
我做错了什么?
答案 0 :(得分:0)
这里的关键是encodeURIComponent,它会转义链接字符串。最好以这种方式转义数据,所以我认为你最好在API端处理转义字符串格式。
还有另一种方法:使用'post'而不是'get'ajax类型。因此,您可以删除转义部分并将纯字符串作为“链接”属性传递。
答案 1 :(得分:0)
看起来您的路由期望link
成为网址路径中的一个段而不是查询字符串变量:/identification/:link
- 尝试删除/:link
或附加编码链接在将AJAX调用回服务器时,在URL的末尾。