Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 带有回调的HTTParty.get会导致MultiJson::DecodeError。_Ruby On Rails_Ruby_Ruby On Rails 3_Json_Httparty - Fatal编程技术网

Ruby on rails 带有回调的HTTParty.get会导致MultiJson::DecodeError。

Ruby on rails 带有回调的HTTParty.get会导致MultiJson::DecodeError。,ruby-on-rails,ruby,ruby-on-rails-3,json,httparty,Ruby On Rails,Ruby,Ruby On Rails 3,Json,Httparty,我正在使用HTTParty调用一个API。当url中有回调时,会导致MultiJson::DecodeError: MultiJson::DecodeError in PagesController#home 756: unexpected token at '12345({"label":"daydata","data":[[1335484800883,69586], [1335571201001,17725]]}); 我的get呼叫如下所示: @data = HTTParty.get("

我正在使用HTTParty调用一个API。当url中有回调时,会导致MultiJson::DecodeError:

MultiJson::DecodeError in PagesController#home

756: unexpected token at '12345({"label":"daydata","data":[[1335484800883,69586],
[1335571201001,17725]]});
我的get呼叫如下所示:

@data = HTTParty.get("http://powermeters.appspot.com/getdays?id=1234567890&from=2012-04-24&to=2012-04-29&callback=12345")

有人知道这是什么原因,以及如何解决吗?

问题是响应是javascript,而不是JSON。要解决此问题,您可以执行以下操作:

response.gsub! /^\d+\((.*)\);?$/m, '\\1'

或者类似的东西。

您也可以重写解析器。下面是一个简单的例子

如果MultiJson…直接从HTTParty的json解析器中提取

class Foo
  include HTTParty
  base_uri "http://foo.bar"

  parser lambda { |body,_|
    new_body = body.gsub(/^\d+\((.*)\)$/, '\1')
    if MultiJson.respond_to?(:adapter)
      MultiJson.load(new_body)
    else
      MultiJson.decode(new_body)
    end
  }
end

是的,看起来像一个JSONP服务,您可以通过一个
标记,或者显式地,或者通过某种客户端库,在自己的网站上指定要执行的回调。@d11wtq-Mm,好的。如果可以在Rails控制器中获取请求,我会对数据进行一些额外的计算。或者我必须从Javascript中获取它,然后将它传递给我的控制器,这样的脚本看起来怎么样?谢谢。你有没有试过@pguardiario的建议,即去掉围绕它的函数调用?@d11wtq是的,我试过了,但没有成功。当我使用HTTparty发出get请求时,应用程序似乎会崩溃,因此我不知道是否会对gsub!做出响应!。你知道我应该把它放在哪里吗?我最终使用@pguardiario的答案,并从HTTParty更改为Net:HTTP.get\u response,从:。谢谢