2016-04-29 33 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 –