JQuery ile nasıl basitçe GETve POSTdeğerler alabilirim ?
Yapmak istediğim şey şuna benzer:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
JQuery ile nasıl basitçe GETve POSTdeğerler alabilirim ?
Yapmak istediğim şey şuna benzer:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
Yanıtlar:
GET parametreleri için bunları şu adresten alabilirsiniz document.location.search:
var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
function decode(s) {
return decodeURIComponent(s.split("+").join(" "));
}
$_GET[decode(arguments[1])] = decode(arguments[2]);
});
document.write($_GET["test"]);
POST parametreleri için, $_POSTnesneyi JSON biçiminde bir <script>etikete serileştirebilirsiniz :
<script type="text/javascript">
var $_POST = <?php echo json_encode($_POST); ?>;
document.write($_POST["test"]);
</script>
Siz oradayken (sunucu tarafında bir şeyler yaparken), GET parametrelerini PHP'de de toplayabilirsiniz:
var $_GET = <?php echo json_encode($_GET); ?>;
Not: Yerleşik json_encodeişlevi kullanmak için PHP sürüm 5 veya üstüne ihtiyacınız olacak .
Güncelleme: İşte daha genel bir uygulama:
function getQueryParams(qs) {
qs = qs.split("+").join(" ");
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])]
= decodeURIComponent(tokens[2]);
}
return params;
}
var $_GET = getQueryParams(document.location.search);
JQuery'nin .getUrlParams adlı GET parametrelerini alması için bir eklenti var
POST için tek çözüm POST'u Moran'ın önerdiği gibi PHP kullanarak bir javascript değişkenine yansıtmaktır.
neden eski güzel PHP kullanmıyorsunuz? örneğin, bir GET parametresi 'target' aldığımızı varsayalım:
function getTarget() {
var targetParam = "<?php echo $_GET['target']; ?>";
//alert(targetParam);
}
Veya bunu kullanabilirsiniz http://plugins.jquery.com/project/parseQuery , çoğundan daha küçüktür (küçültülmüş 449 bayt), ad-değer çiftlerini temsil eden bir nesne döndürür.
Herhangi bir sunucu tarafı dili ile, POST değişkenlerini javascript'e göndermeniz gerekecektir.
.AĞ
var my_post_variable = '<%= Request("post_variable") %>';
Sadece boş değerlere dikkat edin. Yayınlamaya çalıştığınız değişken gerçekten boşsa, bir javascript sözdizimi hatası alırsınız. Bunun bir dize olduğunu biliyorsanız, tırnak içine almanız gerekir. Tam sayı ise, satırı javascript'e yazmadan önce gerçekten var olup olmadığını test etmek isteyebilirsiniz.
JQuery için Query String Object eklentisini deneyebilirsiniz .
İşte GET, birkaç yıl boyunca optimize edilmiş bir rutin olan global bir nesnede tüm değişkenleri bir araya getirecek bir şey . JQuery'nin yükselişinden bu yana, bunları jQuery'nin kendisinde saklamak artık uygun görünüyor, John ile olası bir çekirdek uygulamayı kontrol ediyorum.
jQuery.extend({
'Q' : window.location.search.length <= 1 ? {}
: function(a){
var i = a.length,
r = /%25/g, // Ensure '%' is properly represented
h = {}; // (Safari auto-encodes '%', Firefox 1.5 does not)
while(i--) {
var p = a[i].split('=');
h[ p[0] ] = r.test( p[1] ) ? decodeURIComponent( p[1] ) : p[1];
}
return h;
}(window.location.search.substr(1).split('&'))
});
Örnek kullanım:
switch ($.Q.event) {
case 'new' :
// http://www.site.com/?event=new
$('#NewItemButton').trigger('click');
break;
default :
}
Bu yardımcı olur umarım. ;)
jQuery eklentileri güzel görünüyor ancak ihtiyacım olan şey get parametrelerini ayrıştırmak için hızlı bir js işlevi. İşte bulduğum şey.
$ _GET'iniz çok boyutluysa, istediğiniz şey bu olabilir:
var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
function decode(s) {
return decodeURIComponent(s.split("+").join(" "));
}
//handling for multidimensional arrays
if(decode(arguments[1]).indexOf("[]") > 0){
var newName = decode(arguments[1]).substring(0, decode(arguments[1]).length - 2);
if(typeof $_GET[newName] == 'undefined'){
$_GET[newName] = new Array();
}
$_GET[newName].push(decode(arguments[2]));
}else{
$_GET[decode(arguments[1])] = decode(arguments[2]);
}
});
basit, ancak yine de URL'den değişkenler / değerler almak için kullanışlıdır:
function getUrlVars() {
var vars = [], hash, hashes = null;
if (window.location.href.indexOf("?") && window.location.href.indexOf("&")) {
hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
} else if (window.location.href.indexOf("?")) {
hashes = window.location.href.slice(window.location.href.indexOf('?') + 1);
}
if (hashes != null) {
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars[hash[0]] = hash[1];
}
}
return vars;
}
İnternette bir yerde buldum, sadece birkaç hatayı düzelttim
Aşağıdaki işlevi kullanın:
var splitUrl = function() {
var vars = [], hash;
var url = document.URL.split('?')[0];
var p = document.URL.split('?')[1];
if(p != undefined){
p = p.split('&');
for(var i = 0; i < p.length; i++){
hash = p[i].split('=');
vars.push(hash[1]);
vars[hash[0]] = hash[1];
}
}
vars['url'] = url;
return vars;
};
ve değişkenlere , get değişkeninin adı vars['index']olduğu gibi erişin 'index'.
http://foo.com/?a=b#bar. Bunun b#bariçin değer olduğunu düşünüyor a.
Sadece kayıt için, bu sorunun cevabını bilmek istedim, bu yüzden bir PHP yöntemi kullandım:
<script>
var jGets = new Array ();
<?
if(isset($_GET)) {
foreach($_GET as $key => $val)
echo "jGets[\"$key\"]=\"$val\";\n";
}
?>
</script>
Bu şekilde, bundan sonra çalışan tüm javascript / jquery'im jGets'teki her şeye erişebilir. Hissettiğim güzel ve zarif bir çözüm.
Benim yaklaşımım:
var urlParams;
(window.onpopstate = function () {
var match,
pl = /\+/g, Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
query = window.location.search.substring(1);
urlParams = {};
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
})();