从ajax调用将参数传递给rails后端

时间:2015-12-18 21:38:23

标签: javascript ruby-on-rails ajax reactjs

我正在尝试将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)

我做错了什么?

2 个答案:

答案 0 :(得分:0)

这里的关键是encodeURIComponent,它会转义链接字符串。最好以这种方式转义数据,所以我认为你最好在API端处理转义字符串格式。

还有另一种方法:使用'post'而不是'get'ajax类型。因此,您可以删除转义部分并将纯字符串作为“链接”属性传递。

答案 1 :(得分:0)

看起来您的路由期望link成为网址路径中的一个段而不是查询字符串变量:/identification/:link - 尝试删除/:link或附加编码链接在将AJAX调用回服务器时,在URL的末尾。