jQuery добавляет параметры к url
Мне нравится, как jQuery $.метод ajax () позволяет указать url запроса:
{
url: 'http://domain.com/?param=1',
data{
param2: '2'
}
}
$.метод ajax () будет (вероятно) вызывать $.param () на предоставленных данных и при необходимости добавить его к предоставленному URL.
Мой вопрос: доступен ли этот тип манипуляции url за пределами $.ajax () вызов?
Например, я хочу открыть всплывающее окно, и я хотел бы построить URL таким же образом, как я делаю с $.Аякс().
Я написал функцию, которая делает это, но у меня есть ощущение, что я изобретаю колесо и дублирую уже существующую функцию jQuery:
var prepareUrl = function( url, data )
{
var params = $.param( data );
if ( params.length > 0 )
{
// url contains a query string
if ( url.indexOf( '?' ) > -1 )
{
// get last char of url
var lastChar = url.substr( url.length - 1 );
// Append & to the end of url if required
if ( lastChar != '&' && lastChar != '?' )
{
url += '&';
}
}
else // url doesn't contain a query string
{
url += '?';
}
url += params;
}
return url;
}
Спасибо!
4 ответа:
Поскольку другие ответы не ответили на мой вопрос, я сделал несколько тестов с вызовом
$.ajax()
, чтобы увидеть, как он объединяет URL-адреса с данными param.Мои выводы на данный момент:
- если url содержит
?
, то$.ajax()
добавит'&'
+$.param(data)
- если нет, то
$.ajax()
добавит'?'
+$.param(data)
Поэтому, если я хочу, чтобы моя функция обработки url-адресов согласовывалась с тем, как это делает
$.ajax()
, то это должно быть что-то вроде следующего:var addParams = function( url, data ) { if ( ! $.isEmptyObject(data) ) { url += ( url.indexOf('?') >= 0 ? '&' : '?' ) + $.param(data); } return url; }
Я есть все еще интересно, есть ли встроенный метод jQuery для этого.
Вы можете построить строку запроса следующим образом:
getQueryStr = function(obj) { var str = []; for (var p in obj) if (obj.hasOwnProperty(p)) { str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); } return str.join("&"); } console.log(serialize({ param1: "val1", param2: "val2" }));
Для рекурсивного :
getQueryStr = function(obj, prefix) { var str = []; for (var p in obj) { if (obj.hasOwnProperty(p)) { var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p]; str.push(typeof v == "object" ? getQueryStr(v, k) : encodeURIComponent(k) + "=" + encodeURIComponent(v)); } } return str.join("&"); } console.log(serialize({ favfruit: "apple", data: { name: 'js', points: [1, 2, 3] } }));
Да для этого можно использовать функцию jqueries
.param()
.var params = { param1:"foo", param2:"bar"}; var str = jQuery.param( params ); alert(str);
param
метод создаст строку запроса для вас, но вам нужно будет удалить существующую строку запроса.
var base = "http://example.com/foo/?example=old"; var data = { foo: "hello", bar: "world?" }; var url = base.replace(/\?.*$/, "") + "?" + jQuery.param(data); alert(url);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>