2016-04-29 32 views
0

我是Rails和AJAX的新手。 我想要使用託管在其他網站上的API。我遇到了跨源HTTP請求的問題。所以我試圖通過使用HTTParty來做到這一點。Rails - 通過AJAX的HTTParty請求

在下面的代碼,我設置的$文本(「結果」)作爲JSON.parse(HTTParty())的要求,因此,它可以查詢的網站,並給我結果。

Rails代碼:

<%= form_for(@profile) do |f| %> 
    <%= f.label :content %> 
    <%= f.text_field :content, class: 'ajax-control' %> 
    <%= f.submit "Save changes", class: "btn btn-primary" %> 
<% end %> 

<p class="result"></p> 

Javascript代碼:

<script> 
    $(document).ready(function(){ 

    $('.ajax-control').on('keyup',function(){ 
     var charCount = $(this).val().length; 
     if(charCount===3){ 
     var str1='<%=JSON.parse(HTTParty.get("http://example.com/api.php?param='+$(this).val()+'"))%>' 
     $(".result").text(str1); 
     } 
    }); 
    }); 
</script> 

現在到了奇怪的問題。上面的代碼確實將GET請求發送到example.com(佔位符),但得到的響應表明它不是有效的查詢。

然而,如果我通過了STR1如下 -

var str1='<%=JSON.parse(HTTParty.get("http://example.com/api.php?param=xyz"))%>' 
$(".result").text(str1); 

我得到預期的迴應。如果$(「.ajax-control」)文本字段是「xyz」,那麼我得到的回覆說不是有效的查詢。

是否因其中它拋出一個錯誤在JavaScript字符串連接引入了新的角色?

回答

1

的JavaScript(這又通過ERB紅寶石碼)不會其被渲染在第一時間通過滑軌之後執行。

也就是說,其去每個按鍵回調被調用時被調用,這意味着當Rails正在渲染的Javascript它顯然沒有客戶端的DOM的知識,以便URL是情感上:

JSON.parse(HTTParty.get("http://example.com/api.php?param=")) 

和遠程服務器有一個空param它它不喜歡......

如果你真的需要調用每一個按鍵是API,你有兩種選擇:

  1. 獲取使用CORS
  2. 在你的Rails應用程序, 又使用Ruby的側HTTParty調用API和繼電器 響應返回給客戶端調用一個端點它通過Ajax工作。
+0

謝謝!我終於明白爲什麼出現問題了。 我沒有使用CORS的原因是API所在的服務器不支持它。 還有別的辦法嗎? –

+0

@ArjunBharadwaj如果您不能使用CORS,那麼您的下一個最佳選擇是使用您自己的服務器來中繼該HTTP請求,因此向您的服務器發出請求,調用example.com請求並將其傳回給您的AJAX –