2011-03-14 88 views
4

一個URL這似乎是一個簡單的問題,獲取的JSON對象,但我有一個編碼者的心理障礙:通過調用參數

概念:

我鍵入一個URL,即 - www.mysite。 COM/getStuff?名稱=傑裏&職業=工程師&編號= 12345

,而不是取回一個網頁或東西,我想找回一個JSON對象,這樣我可以在不同的頁面解析和。

美中不足的是:

我當然可以通過調用一個MVC控制器,這些參數和返回JSON對象做到這一點。然而,假設我需要在一個js文件中創建這個json對象,該文件從URL中獲取這些參數的值,並將結果返回給我的json。

的問題

我可以傳遞參數給一個js文件,並返回一個JSON對象?或 我可以從控制器調用一個js文件並將這些參數傳遞給並檢索一個json對象嗎?
我是否甚至需要通過URL調用控制器,或者我可以調用一個js文件給它的參數從一個URL,然後返回json?

什麼是處理這種情況的正確/最好的方式,用MVC,js,jquery ......什麼?

非常感謝你們!

+0

只要你可以返回一個JSON OBJET,你可以打電話給你想要的文件。 Javascript的唯一問題是從URL中獲取值。你需要編寫一個GET函數來獲取它們在PHP只需要$ _GET的地方。 –

+0

很難理解你想要達到的目標。 –

+0

@LekisS,謝謝我明白你在說什麼。 @TheSuperTramp,很難理解你不明白的東西,因爲你沒有解釋什麼是沒有道理的,爲什麼......因爲可讀性強,我試圖達到的目標和標題。也許「如何」和「爲什麼」不清楚,但我需要的不僅僅是「我不明白」來幫助你。 – EKet

回答

2

使用jQuery通過創建JSON對象之前插入到<script>這個標籤來解析URL。從link從LekisS

$.extend({ 
    getUrlVars: function(){ 
    var vars = [], hash; 
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 
    for(var i = 0; i < hashes.length; i++) 
    { 
     hash = hashes[i].split('='); 
     vars.push(hash[0]); 
     vars[hash[0]] = hash[1]; 
    } 
    return vars; 
    }, 
    getUrlVar: function(name){ 
    return $.getUrlVars()[name]; 
    } 
}); 

// Get object of URL parameters 
var allVars = $.getUrlVars(); 

// Getting URL var by its nam 
var byName = $.getUrlVar('name'); 

在一個單獨的腳本標記創建JSON對象。您將需要包含Json2.js插件將對象轉換爲JSON。因此,在JSON對象創建之前也要包含這個腳本。

一旦你有合適的劇本和變量,您可以創建使用需要通過調用它們作爲使用jQuery的例子底部顯示這些參數JSON對象。您還可以從Json2.js腳本文件中查找想要的JSON轉換(即字符串或對象)。

現在我們有一大堆的腳本里面的一切,但我們在哪裏,通過URL調用get JSON對象?

因此,答案很簡單:

這些腳本,其中最後一個腳本終於創建並返回JSON創建一個簡單的HTML頁面。上傳到服務器,並使用像

www.mysite.com/getStuff?para1=value&para2=value2 URL參數,以獲得JSON對象。

2

你有幾個選項

1)生成JSON在JavaScript

要做到這一點,你需要創建一個簡單的頁面,其中包括一個JavaScript JSON編碼器(如https://github.com/douglascrockford/JSON-js)。這將在「/getStuff/index.html」主辦,將通過輸入被稱爲「www.mysite.com/getStuff/?arg=val ......」例如:

<html> 
    <head> 
     <script src="json.js" type="text/javascript"></script> 
     <script type="text/javascript"> 
        //this function will take the window.location.search string of ?name=val and 
        //create an object like {'name':'val'} 
      var parseUrl = function(urlParams) { 
       var retObj = {}; 
       var urlParameters = null; 

       if (!urlParams || urlParams.length == 0) {return retObj} 
       if (urlParams.charAt(0) == '?') { 
        urlParameters = urlParams.substring(1); 
       }else { 
        urlParameters = urlParams; 
       } 
       if (urlParameters.length == 0) {return retObj} 
       var parameterPairs = urlParameters.split('&'); 
       var x; 
       for (x in parameterPairs) { 
        var parameterPair = parameterPairs[x]; 
        parameterPair = parameterPair.split('='); 
        retObj[parameterPair[0]] = parameterPair[1]; 
       } 
       return retObj; 
      }; 
      var createJson = function(){ 
       var params = parseUrl(window.location.search); 
       //do work here 
       var retObj = {}; //suppose this is the result of the work 
       document.print(JSON.stringify(retObj)); //use the included JSON encoder 
      }; 
     </script> 
    </head> 
    <body onload="createJson();"> 
    </body> 
</html> 

2)使用MVC框架

存在的每個MVC框架都會讓您訪問頁面請求中使用的搜索參數。有些人會要求你在/ function/arg1/arg2 style(so/getStuff/jerry/engineer/12345,在你的情況下)提供它們。其他人使用更傳統的/ function /?argName = argVal ...方法。一旦有了參數,將它們以JSON格式(http://php.net/manual/en/book.json.php)寫入頁面是件小事。

決定,決定

就個人而言,我會使用MVC方法,因爲它需要最少四處奔波得到你想要的JSON。但是,除非您熟悉MVC框架(例如蛋糕),否則您可能會發現啓動和運行的過程有點繁瑣 - 這些框架旨在用於提供頁面內容並讓它們提供服務JSON並非總是明確記錄。

+0

非常感謝有組織的解釋,我們很少有這個了。我必須說,我更喜歡jquery解析器的url參數,正如LekisS的評論中提到的那樣,我使用了它。這是一個更清潔。但是你的腳本和url解析方法非常棒。我個人更喜歡使用MVC,因爲一切都在客戶端完成,我根本不需要去服務器,它不是重要的數據。但LekisS事先評論了這種方法,等待看他是否公開回答。非常感謝。 – EKet