如何在Javascript中获取给定url的内容类型

How to get content type of a given url inside Javascript?

本文关键字:url 类型 Javascript 获取      更新时间:2023-09-26

我想知道用户在Javascript代码中输入的给定url的内容类型。实际上,我有一个下拉列表(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脚本内容。

require 'open-uri'
str = open('http://www.ofdp.org/benchmark_indices/25')
str.content_type

但是,它似乎不起作用。我得到Ajax失败。可能是因为脚本内容的url路径。rb吗?我应该如何在这里指定脚本路径?(相对或绝对)

同源策略防止您使用客户端JavaScript直接发现任意uri的信息(您控制的uri是另一回事)。

您需要使用另一种技术获得该信息,例如您的服务器端Ruby。

您可以通过简单地向服务器提交表单并向浏览器返回一个新网页来实现这一点。

如果不想离开页面,那么可以使用Ajax传递数据。这里不乏Ajax教程,这里有一个来自MDN的好教程。

下面是一个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的结果。

在@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请求url。