2013-03-28 52 views
2

我想知道用戶在我的Javascript代碼中輸入的給定url的內容類型。實際上,我有一個下拉列表(html,csv,xls等),我想這樣做,當用戶輸入一個網址時,我想檢測網址內容的類型,並基於這種類型I想要設置我的下拉列表(html,csv,xls等)的值。我知道,我可以使用Ruby這樣的內容類型:如何獲得Javascript內部給定url的內容類型?

require 'open-uri' 
str = open('http://example.com') 
str.content_type #=> "text/html" 

,或者還,我可以用捲曲來獲取內容,然後分析它知道的內容類型。但是,我需要在我的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

運行JavaScript的環境是什麼?節點? WSH?瀏覽器擴展?瀏覽器中的網頁? – Quentin

+0

您是否已經選擇了一個庫或api來創建HTTP請求?如果是這樣,哪個? – Quentin

+0

我認爲你必須向你的服務器發出一個AJAX請求,然後使用你的代碼,迴應AJAX,並做適當的事情。您將無法使用Javascript進行跨域請求並獲取其內容類型 – Ian

回答

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控制器我創建了一個新的方法命名內容:

def content 
    req = open(params[:input_url]) 
    render :text => req.content_type 
    end 

然後加入的routes.rb文件中的新航線:

get "/wiki_forms/content" => 'wiki_forms#content' 

and used /wiki_forms/content as ajax request url。而且,現在一切都很好。

1

same origin policy阻止您使用客戶端JavaScript直接發現有關任意URI(您控制的URI是不同的故事)的信息。

您需要使用其他技術獲取該信息,例如服務器端的Ruby。

您可以通過簡單地向服務器提交表單並將新網頁返回給瀏覽器來實現。

如果你不想離開頁面,那麼你可以使用Ajax傳遞數據。那裏不乏Ajax教程,here is a good one from MDN

+0

+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結果。

+0

+1真誠的努力:-)讓我試試這個:-) –

+0

@KeenLearner聽起來不錯!我真的不知道如何將URL映射到控制器/操作,所以你一定需要改變它。有很多事情我不確定與RoR :)很明顯,你將不得不更新URL的東西。讓我知道你用這種類型的代碼發現了什麼。隨意發佈您嘗試在原始問題中使用的內容以及您獲得的任何錯誤/消息! – Ian

+0

我發佈了一個修改。請看看。謝謝。 –