Ruby JSONP returns Errno::EPROTONOSUPPORT



这个让我抓狂。我有两个网站必须通过JSONP相互交流。

站点A在其数据库中检查是否存在某个值,如果找到,则返回json数据{"result":"Found in library"}。

当从命令行执行cURL时,我会按预期获得数据。

从站点B进行Ajax调用时,我可以在站点a的日志中看到请求处理正确,但站点B抱怨"第1行数据意外结束"。检查器根本没有显示任何数据,所以我认为这就是问题所在。数据去了哪里?

由于我不希望Ajax调用的内部工作被揭露,所以我希望在Ruby控制器中使用Net::HTTP调用来完成它。同样,我可以在站点A的日志中看到,调用处理正确,并返回结果。这一次,Ruby日志显示:

错误::EPROTONOSUPPORT(无法打开到xx.domain.com:443的TCP连接(不支持协议-"xx.domain.com"端口443的套接字(2((:

站点B:中的我的控制器

def query
respond_to do |format|
format.js {
# Submit Ajax call
uri = URI(base_url + "/data_subjects/query.json")
data = {
key: api_key,
parmA: params[:parmA],
parmB: params[:parmB],
}
uri.query = URI.encode_www_form(data)
logger.info("QUERY: #{uri.inspect}")
res = Net::HTTP.get_response(uri)
render :json, JSON.parse(res)
}
end
end

我在站点A的控制器:

def query
respond_to do |format|
format.json {
.... Do some stuff
if $rc == 1
render json: {:result => I18n.t("result_found")}, status: :ok , :layout => false
else
render json: {result: I18n.t("result_not_found")}, status: 404, :layout => false
end
}
end

正如我所说,使用cURL看起来一切正常,但使用jQuery或Ruby都会失败。

更新

好的,找到了!事实证明,您需要为json响应指定":callback=>params[:callback]":

render json: {:result => I18n.t("result_found")}, :callback => params[:callback], status: :ok , :layout => false

问题是由运行调用进程的FreeBSD监狱中不支持IPv6引发的。而被调用的服务器只有IPv6连接。

最新更新