2016-08-23 85 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)

的简单方法