2015-12-18 67 views
1

我正在嘗試將API路由傳遞給Rails,以便服務器執行調用而不是客戶端。當我嘗試這樣做時,我找不到404。當我將這條路線傳遞給方法時,它可以在控制檯上找到。但不是來自ajax調用。這裏是我的控制器方法:從ajax調用傳遞參數到rails後端

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路線我得到正確的串狀這個「/ v1 /信息/ YMME /年/ 2012 /完成/ 56 /模型」,就像我從軌道控制檯說,它的工作原理,但我不能正確地得到參數這是我得到的JavaScript控制檯,當我做通過ajax電話:

 GET http://localhost:3000/vehicles/identification/?link=%252Fv1%252FInformation%252FYMME%252FYears%252F2012%252FMakes 404 (Not Found) 

我在做什麼錯?

回答

0

看起來你的路線期待link是在URL路徑,而不是一個查詢字符串變量段:/identification/:link - 試着做一個AJAX調用時掉落/:link或追加編碼的鏈接網址的結尾回到服務器。

+0

謝謝我刪除了/:鏈接,它工作。 –

0

這裏的關鍵是encodeURIComponent,它轉義鏈接字符串。以這種方式更好地轉義數據,所以我想你最好在API端處理轉義字符串格式。

還有另外一種方法:使用'post'而不是'get'ajax類型。因此,您可以放棄轉義部分並將純字符串作爲「鏈接」屬性傳遞。

+0

如果您查看問題中的代碼,則該鏈接已經通過'encodeURIComponent'編碼。 –

+0

我注意到它的唯一原因是代碼。 – Microfed