2016-08-23 166 views
1

我必須處理遵循斜槓分隔的參數在URL這樣用斜線Ajax請求分離參數

http://example.com/api/get_nearest_places/:en_type_id/:longtude/:latitude 

我知道,我可以建立一個URL作爲字符串件類似如下

var longtude = 33.42432; 
var latitude = 42.3243; 
var en_type_id = 1; 
var url = "http://example.com/api/get_nearest_places/"+en_type_id+"/"+longtude+"/"+latitude; 
API

然後通過這個URL Ajax函數,但這是醜陋的方式來管理,尤其是如果有很多請求,所以這種方式是不實際的

我想知道如果這是一個JavaScript函數或採用JOSN對象的參數爲URL和URL的參數的JOSN對象,並執行匹配的參數然後返回URL,或者以更美的方式將基礎URL作爲參數,函數名稱和JSON對象中的參數

+0

看看jQuery庫。 $ .post()可能是你正在尋找的方法 –

+0

@Mady不是OP要求的 – epascarello

回答

1

對遊戲來說遲了一點,但是如果你想循環保存值的對象,我會使用Object.keys。

function urlReplace(url, params) { 
 
    Object.keys(params).forEach(function(key) { 
 
    //url = url.replace(new RegExp(":" + key), params[key]); 
 
    url = url.replace(":" + key, params[key]); 
 
    }); 
 
    return url; 
 
} 
 

 

 
var url = urlReplace("http://example.com/api/get_nearest_places/:en_type_id/:longtude/:latitude", { 
 
    longtude: 33.42432, 
 
    latitude: 42.3243, 
 
    en_type_id: 1 
 
}); 
 

 
console.log(url);

或者你也可以從正則表達式的對象去。這很好,如果你有一個對象可能有更多的關鍵字,這將是在網址中。沒有浪費時間循環無效的密鑰。

function urlReplace(url, params) { 
 
    return url.replace(/:([^\/]+)/g, function(match, key) { 
 
    return params[key]; 
 
    }); 
 
} 
 

 

 
var url = urlReplace("http://example.com/api/get_nearest_places/:en_type_id/:longtude/:latitude", { 
 
    longtude: 33.42432, 
 
    latitude: 42.3243, 
 
    en_type_id: 1 
 
}); 
 

 
console.log(url);

3
function getURLWithParam(url, param) 
{ 
    $.each(params, function(index, value){ 
     url = url.replace(":" + index, value); 
    }); 
    return url; 
} 

用法:

getURLWithParam("http://example.com/api/get_nearest_places/:en_type_id/:longtude/:latitude", 
{ 
    en_type_id: 1, 
    latitude: 42.3243, 
    longtude: 33.42432 
}); 
2

您可以創建一個像

function createUrl(url, obj) { 
 
    for (x in obj) { 
 
    url = url.replace(':' + x, obj[x]); 
 
    } 
 
    return url; 
 
} 
 

 
var url = createUrl("http://example.com/api/get_nearest_places/:en_type_id/:longtude/:latitude", { 
 
    longtude: 33.42432, 
 
    latitude: 42.3243, 
 
    en_type_id: 1 
 
}); 
 
console.log(url)

的簡單方法