2

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​​ スクリプト content.rb を持っています。

require 'open-uri'

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

しかし、うまくいかないようです。私はAjaxの失敗をしています。スクリプト content.rb の URL パスが原因でしょうか? ここでスクリプト パスを指定するにはどうすればよいですか? (相対または絶対)

4

3 に答える 3

1

同一オリジン ポリシーにより、クライアント サイド JavaScript を使用して任意の URI に関する情報を直接検出することができなくなります (制御する URI は別の話です)。

サーバー側の Ruby など、別のテクノロジを使用してその情報を取得する必要があります。

これは、フォームをサーバーに送信し、新しい Web ページをブラウザーに返すだけで実行できます。

ページを離れたくない場合は、Ajax を使用してデータを渡すことができます。Ajax のチュートリアルは山ほどありますが、MDN の優れたチュートリアルを次に示します。

于 2013-03-28T15:39:12.330 に答える
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 をこのメソッドにマップする方法を理解し、それurlを使用するように AJAX オプションを更新する必要があります。

したがって、Javascript コード内 (doneメソッド内) では、AJAX リクエスト全体が成功し、data変数には Ruby コードからの結果が含まれている必要がありますreq.content_type

于 2013-03-28T16:02:25.677 に答える
0

最後に、@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 として使用しました。そして、すべてがうまく機能しています。

于 2013-03-28T19:03:20.580 に答える