我想知道用户在我的Javascript代码中输入的给定网址的内容类型。实际上,我有一个下拉列表(html,csv,xls等),我想在用户输入url时这样做,我想检测url内容的类型并根据这个类型我想要设置我的下拉列表的值(html,csv,xls等)。我知道,我可以像这样使用Ruby获取内容类型:
require 'open-uri'
str = open('http://example.com')
str.content_type #=> "text/html"
或者,我也可以使用curl获取内容,然后解析它以了解内容类型。但是,我需要在我的Javascript代码中执行此操作,因为我需要在上面解释。有什么想法?
EDIT_1:
我在javascript中尝试了这段代码:
$("#wiki_form_url").change(function(){
$.ajax({
type: "GET",
url: "content.rb",
data: {
// input_url: $("#wiki_form_url").val()
},
dataType: "html"
}).done(function (data) {
// `data` contains the content-type
alert('Success !!!');
}).fail(function () {
alert("failed AJAX call");
});
});
我有一个ruby脚本content.rb,我在其中:
require 'open-uri'
str = open('http://www.ofdp.org/benchmark_indices/25')
str.content_type
但是,它似乎不起作用。我得到了Ajax失败。可能是因为脚本content.rb的url路径?我该如何在这里指定脚本路径? (相对或绝对)
答案 0 :(得分:1)
same origin policy阻止您使用客户端JavaScript直接发现有关任意URI的信息(您控制的URI是另一个故事)。
您需要使用其他技术获取该信息,例如服务器端Ruby。
您只需将表单提交到服务器并将新网页返回到浏览器即可。
如果您不想离开页面,则可以使用Ajax传递数据。有很多Ajax教程,here is a good one from MDN。
答案 1 :(得分:0)
以下是AJAX调用的示例:
$(document).ready(function () {
$("#button_check").on("click", function () {
$.ajax({
type: "GET",
url: "Your URL",
data: {
input_url: $("#textbox_id").val()
},
dataType: "html"
}).done(function (data) {
// `data` contains the content-type
alert(data);
}).fail(function () {
alert("failed AJAX call");
});
});
});
您的HTML类似于:
<input type="text" id="textbox_id" />
<input type="button" id="button_check" value="Submit" />
你的Ruby代码就像:
require 'open-uri'
class TestController < ApplicationController
def index
req = open(params[:input_url])
render :text => req.content_type
end
end
我之前从未使用过RoR,所以我不知道这是正确的还是稍微有效。但是,在加入几个教程时,我可以迅速想出来。它只是您似乎正在寻找的概念。您需要弄清楚如何将URL映射到此方法,然后更新AJAX选项url
以使用它。
所以在Javascript代码中 - 在done
方法中,这意味着整个AJAX请求成功,data
变量应该包含Ruby代码req.content_type
的结果。
答案 2 :(得分:0)
Atlast我可以在@Ian的帮助下找出整件事。这是我完成的代码:在javascript文件中:
$("#wiki_form_url").change(function () {
$.ajax({
type: "GET",
url: "/wiki_forms/content",
data: {
input_url: $("#wiki_form_url").val()
},
dataType: "text"
}).done(function (data) {
// `data` contains the content-type
alert('Success');
console.log(data);
// alert(data);
}).fail(function () {
alert("failed AJAX call");
});
});
在我的wiki_forms控制器中,我创建了一个名为content的新方法:
def content
req = open(params[:input_url])
render :text => req.content_type
end
然后在routes.rb文件中添加了一个新路由:
get "/wiki_forms/content" => 'wiki_forms#content'
并使用 / wiki_forms / content 作为ajax请求网址。而且,现在一切都很顺利。