【问题标题】:Rails - HTTParty request through AJAXRails - 通过 AJAX 的 HTTParty 请求
【发布时间】:2016-04-29 15:34:28
【问题描述】:

我是 Rails 和 AJAX 的新手。 我想使用托管在不同网站上的 API。我遇到了跨源 HTTP 请求的问题。所以我尝试使用 HTTParty 来做到这一点。

在下面的代码中,我将 $(".result") 的文本设置为 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 中的字符串连接是否会引入新字符,从而引发错误?

【问题讨论】:

    标签: javascript ruby-on-rails json ajax httparty


    【解决方案1】:

    该 javascript(通过 erb 又具有 ruby​​ 代码)在 Rails 首次呈现后不会执行。

    也就是说,它的 not 将在每次调用按键回调时被调用,这意味着当 Rails 呈现该 Javascript 时,它显然不知道客户端 DOM,因此 URL是有感情的:

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

    远程服务器有一个空的param,它不喜欢它...

    如果您确实需要为每次按键调用该 API,您有两种选择:

    1. 使用 CORS 通过 Ajax 使其工作
    2. 在 Rails 应用程序中调用端点, 进而使用 Ruby 端 HTTParty 调用 API 和中继 将响应返回给客户端。

    【讨论】:

    • 谢谢!我终于明白为什么会出现问题了。我不使用 CORS 的原因是托管 API 的服务器不支持它。有没有其他办法?
    • @ArjunBharadwaj 如果您不能使用 CORS,那么您的下一个最佳选择是使用您自己的服务器来中继该 HTTP 请求,因此向您的服务器发出请求,该服务器调用 example.com 请求并将其传回到你的 AJAX
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多