Cập nhật: Tôi hoàn toàn viết lại câu trả lời này. Mã cũ vẫn còn đó, ở phía dưới, nhưng tôi không khuyên bạn nên.
Có hai cách chính bạn có thể nhận được các biến GET
:
- Thông qua mảng
0 của PHP [mảng kết hợp].function QuerystringTable[_url]{ // private var url = _url, table = {}; function buildTable[]{ getQuerystring[].split['&'].filter[validatePair].map[parsePair]; } function parsePair[pair]{ var splitPair = pair.split['='], key = decodeURIComponent[splitPair[0]], value = decodeURIComponent[splitPair[1]]; table[key] = value; } function validatePair[pair]{ var splitPair = pair.split['=']; return !!splitPair[0] && !!splitPair[1]; } function validateUrl[]{ if[typeof url !== "string"]{ throw "QuerystringTable[] :: : expected string, got " + typeof url; } if[url == ""]{ throw "QuerystringTable[] :: Empty string given for argument "; } } // public function getKeys[]{ return Object.keys[table]; } function getQuerystring[]{ var string; validateUrl[]; string = url.split['?'][1]; if[!string]{ string = url; } return string; } function getValue[key]{ var match = table[key] || null; if[!match]{ return "undefined"; } return match; } buildTable[]; this.getKeys = getKeys; this.getQuerystring = getQuerystring; this.getValue = getValue; }
- Thông qua đối tượng
1 của JavaScript.function QuerystringTable[_url]{ // private var url = _url, table = {}; function buildTable[]{ getQuerystring[].split['&'].filter[validatePair].map[parsePair]; } function parsePair[pair]{ var splitPair = pair.split['='], key = decodeURIComponent[splitPair[0]], value = decodeURIComponent[splitPair[1]]; table[key] = value; } function validatePair[pair]{ var splitPair = pair.split['=']; return !!splitPair[0] && !!splitPair[1]; } function validateUrl[]{ if[typeof url !== "string"]{ throw "QuerystringTable[] :: : expected string, got " + typeof url; } if[url == ""]{ throw "QuerystringTable[] :: Empty string given for argument "; } } // public function getKeys[]{ return Object.keys[table]; } function getQuerystring[]{ var string; validateUrl[]; string = url.split['?'][1]; if[!string]{ string = url; } return string; } function getValue[key]{ var match = table[key] || null; if[!match]{ return "undefined"; } return match; } buildTable[]; this.getKeys = getKeys; this.getQuerystring = getQuerystring; this.getValue = getValue; }
Với PHP, bạn chỉ có thể tạo một "mẫu", điều này giống như thế này:
var $_GET = JSON.parse[""];
Tuy nhiên, tôi nghĩ rằng hỗn hợp các ngôn ngữ ở đây là cẩu thả, và nên tránh nếu có thể. Tôi thực sự không thể nghĩ ra bất kỳ lý do chính đáng nào để trộn dữ liệu giữa PHP và JavaScript.
Nó thực sự sôi sục với điều này:
- Nếu dữ liệu có thể thu được thông qua JavaScript, hãy sử dụng JavaScript.
- Nếu không thể lấy dữ liệu thông qua JavaScript, hãy sử dụng AJAX.
- Nếu bạn cần giao tiếp với máy chủ, hãy sử dụng Ajax.
Vì chúng ta đang nói về
function QuerystringTable[_url]{
// private
var url = _url,
table = {};
function buildTable[]{
getQuerystring[].split['&'].filter[validatePair].map[parsePair];
}
function parsePair[pair]{
var splitPair = pair.split['='],
key = decodeURIComponent[splitPair[0]],
value = decodeURIComponent[splitPair[1]];
table[key] = value;
}
function validatePair[pair]{
var splitPair = pair.split['='];
return !!splitPair[0] && !!splitPair[1];
}
function validateUrl[]{
if[typeof url !== "string"]{
throw "QuerystringTable[] :: : expected string, got " + typeof url;
}
if[url == ""]{
throw "QuerystringTable[] :: Empty string given for argument ";
}
}
// public
function getKeys[]{
return Object.keys[table];
}
function getQuerystring[]{
var string;
validateUrl[];
string = url.split['?'][1];
if[!string]{
string = url;
}
return string;
}
function getValue[key]{
var match = table[key] || null;
if[!match]{
return "undefined";
}
return match;
}
buildTable[];
this.getKeys = getKeys;
this.getQuerystring = getQuerystring;
this.getValue = getValue;
}
0 ở đây [hoặc ít nhất là tôi cho rằng chúng tôi đã viết câu trả lời ban đầu], bạn nên lấy nó qua JavaScript.Trong câu trả lời ban đầu, tôi đã có hai phương pháp để lấy chuỗi truy vấn, nhưng nó quá lộn xộn và dễ bị lỗi. Đó là bây giờ ở dưới cùng của câu trả lời này.
Dù sao, tôi đã thiết kế một "lớp" nhỏ để lấy chuỗi truy vấn [thực ra là một hàm tạo đối tượng, xem phần có liên quan từ bài viết OOP của MDN]:
function QuerystringTable[_url]{
// private
var url = _url,
table = {};
function buildTable[]{
getQuerystring[].split['&'].filter[validatePair].map[parsePair];
}
function parsePair[pair]{
var splitPair = pair.split['='],
key = decodeURIComponent[splitPair[0]],
value = decodeURIComponent[splitPair[1]];
table[key] = value;
}
function validatePair[pair]{
var splitPair = pair.split['='];
return !!splitPair[0] && !!splitPair[1];
}
function validateUrl[]{
if[typeof url !== "string"]{
throw "QuerystringTable[] :: : expected string, got " + typeof url;
}
if[url == ""]{
throw "QuerystringTable[] :: Empty string given for argument ";
}
}
// public
function getKeys[]{
return Object.keys[table];
}
function getQuerystring[]{
var string;
validateUrl[];
string = url.split['?'][1];
if[!string]{
string = url;
}
return string;
}
function getValue[key]{
var match = table[key] || null;
if[!match]{
return "undefined";
}
return match;
}
buildTable[];
this.getKeys = getKeys;
this.getQuerystring = getQuerystring;
this.getValue = getValue;
}
Demo jsfiddle
Nó mạnh hơn nhiều, không dựa vào regex, kết hợp các phần tốt nhất của cả hai phương pháp trước đó và sẽ xác nhận đầu vào của bạn. Bạn có thể cung cấp cho nó các chuỗi truy vấn khác với phần từ URL và nó sẽ thất bại lớn nếu bạn đưa ra đầu vào xấu. Hơn nữa, giống như một đối tượng/mô -đun tốt, nó không biết hoặc quan tâm đến bất cứ điều gì bên ngoài định nghĩa lớp, vì vậy nó có thể được sử dụng với bất cứ điều gì.
Chất xây dựng tự động điền vào bảng nội bộ của nó và giải mã từng chuỗi sao cho
function QuerystringTable[_url]{
// private
var url = _url,
table = {};
function buildTable[]{
getQuerystring[].split['&'].filter[validatePair].map[parsePair];
}
function parsePair[pair]{
var splitPair = pair.split['='],
key = decodeURIComponent[splitPair[0]],
value = decodeURIComponent[splitPair[1]];
table[key] = value;
}
function validatePair[pair]{
var splitPair = pair.split['='];
return !!splitPair[0] && !!splitPair[1];
}
function validateUrl[]{
if[typeof url !== "string"]{
throw "QuerystringTable[] :: : expected string, got " + typeof url;
}
if[url == ""]{
throw "QuerystringTable[] :: Empty string given for argument ";
}
}
// public
function getKeys[]{
return Object.keys[table];
}
function getQuerystring[]{
var string;
validateUrl[];
string = url.split['?'][1];
if[!string]{
string = url;
}
return string;
}
function getValue[key]{
var match = table[key] || null;
if[!match]{
return "undefined";
}
return match;
}
buildTable[];
this.getKeys = getKeys;
this.getQuerystring = getQuerystring;
this.getValue = getValue;
}
3 chẳng hạn, sẽ trở thành bên trong:{
"foo?" : "bar baz",
"ampersand" : "this thing: &"
}
Tất cả các công việc được thực hiện cho bạn khi khởi tạo.
Đây là cách sử dụng nó:
var qst = new QuerystringTable[location.href];
qst.getKeys[] // returns an array of keys
qst.getValue["foo"] // returns the value of foo, or "undefined" if none.
qst.getQuerystring[] // returns the querystring
Điều đó tốt hơn nhiều. Và để lại phần URL cho cả lập trình viên cho phép điều này được sử dụng trong môi trường không phải là trình duyệt [được thử nghiệm trong cả
function QuerystringTable[_url]{
// private
var url = _url,
table = {};
function buildTable[]{
getQuerystring[].split['&'].filter[validatePair].map[parsePair];
}
function parsePair[pair]{
var splitPair = pair.split['='],
key = decodeURIComponent[splitPair[0]],
value = decodeURIComponent[splitPair[1]];
table[key] = value;
}
function validatePair[pair]{
var splitPair = pair.split['='];
return !!splitPair[0] && !!splitPair[1];
}
function validateUrl[]{
if[typeof url !== "string"]{
throw "QuerystringTable[] :: : expected string, got " + typeof url;
}
if[url == ""]{
throw "QuerystringTable[] :: Empty string given for argument ";
}
}
// public
function getKeys[]{
return Object.keys[table];
}
function getQuerystring[]{
var string;
validateUrl[];
string = url.split['?'][1];
if[!string]{
string = url;
}
return string;
}
function getValue[key]{
var match = table[key] || null;
if[!match]{
return "undefined";
}
return match;
}
buildTable[];
this.getKeys = getKeys;
this.getQuerystring = getQuerystring;
this.getValue = getValue;
}
4 và function QuerystringTable[_url]{
// private
var url = _url,
table = {};
function buildTable[]{
getQuerystring[].split['&'].filter[validatePair].map[parsePair];
}
function parsePair[pair]{
var splitPair = pair.split['='],
key = decodeURIComponent[splitPair[0]],
value = decodeURIComponent[splitPair[1]];
table[key] = value;
}
function validatePair[pair]{
var splitPair = pair.split['='];
return !!splitPair[0] && !!splitPair[1];
}
function validateUrl[]{
if[typeof url !== "string"]{
throw "QuerystringTable[] :: : expected string, got " + typeof url;
}
if[url == ""]{
throw "QuerystringTable[] :: Empty string given for argument ";
}
}
// public
function getKeys[]{
return Object.keys[table];
}
function getQuerystring[]{
var string;
validateUrl[];
string = url.split['?'][1];
if[!string]{
string = url;
}
return string;
}
function getValue[key]{
var match = table[key] || null;
if[!match]{
return "undefined";
}
return match;
}
buildTable[];
this.getKeys = getKeys;
this.getQuerystring = getQuerystring;
this.getValue = getValue;
}
5] và cho phép một kịch bản mà bạn có thể muốn so sánh hai chuỗi truy vấn khác nhau.var qs1 = new QuerystringTable[/* url #1 */],
qs2 = new QuerystringTable[/* url #2 */];
if [qs1.getValue["vid"] !== qs2.getValue["vid"]]{
// Do something
}
Như tôi đã nói ở trên, có hai phương pháp lộn xộn được tham chiếu bởi câu trả lời này. Tôi đang giữ họ ở đây để độc giả không phải săn lùng lịch sử sửa đổi để tìm thấy chúng. Họ đây rồi:
1]
6. Điều này chỉ lấy url và phân tích trực tiếp nó với regexfunction QuerystringTable[_url]{ // private var url = _url, table = {}; function buildTable[]{ getQuerystring[].split['&'].filter[validatePair].map[parsePair]; } function parsePair[pair]{ var splitPair = pair.split['='], key = decodeURIComponent[splitPair[0]], value = decodeURIComponent[splitPair[1]]; table[key] = value; } function validatePair[pair]{ var splitPair = pair.split['=']; return !!splitPair[0] && !!splitPair[1]; } function validateUrl[]{ if[typeof url !== "string"]{ throw "QuerystringTable[] :: : expected string, got " + typeof url; } if[url == ""]{ throw "QuerystringTable[] :: Empty string given for argument "; } } // public function getKeys[]{ return Object.keys[table]; } function getQuerystring[]{ var string; validateUrl[]; string = url.split['?'][1]; if[!string]{ string = url; } return string; } function getValue[key]{ var match = table[key] || null; if[!match]{ return "undefined"; } return match; } buildTable[]; this.getKeys = getKeys; this.getQuerystring = getQuerystring; this.getValue = getValue; }
$_GET=function[key,def]{ try{ return RegExp['[?&;]'+key+'=[[^?]*]'].exec[location.href][1] }catch[e]{ return def||'' } }
Dễ dàng, nếu chuỗi truy vấn là
7, thìfunction QuerystringTable[_url]{ // private var url = _url, table = {}; function buildTable[]{ getQuerystring[].split['&'].filter[validatePair].map[parsePair]; } function parsePair[pair]{ var splitPair = pair.split['='], key = decodeURIComponent[splitPair[0]], value = decodeURIComponent[splitPair[1]]; table[key] = value; } function validatePair[pair]{ var splitPair = pair.split['=']; return !!splitPair[0] && !!splitPair[1]; } function validateUrl[]{ if[typeof url !== "string"]{ throw "QuerystringTable[] :: : expected string, got " + typeof url; } if[url == ""]{ throw "QuerystringTable[] :: Empty string given for argument "; } } // public function getKeys[]{ return Object.keys[table]; } function getQuerystring[]{ var string; validateUrl[]; string = url.split['?'][1]; if[!string]{ string = url; } return string; } function getValue[key]{ var match = table[key] || null; if[!match]{ return "undefined"; } return match; } buildTable[]; this.getKeys = getKeys; this.getQuerystring = getQuerystring; this.getValue = getValue; }
8 sẽ trả vềfunction QuerystringTable[_url]{ // private var url = _url, table = {}; function buildTable[]{ getQuerystring[].split['&'].filter[validatePair].map[parsePair]; } function parsePair[pair]{ var splitPair = pair.split['='], key = decodeURIComponent[splitPair[0]], value = decodeURIComponent[splitPair[1]]; table[key] = value; } function validatePair[pair]{ var splitPair = pair.split['=']; return !!splitPair[0] && !!splitPair[1]; } function validateUrl[]{ if[typeof url !== "string"]{ throw "QuerystringTable[] :: : expected string, got " + typeof url; } if[url == ""]{ throw "QuerystringTable[] :: Empty string given for argument "; } } // public function getKeys[]{ return Object.keys[table]; } function getQuerystring[]{ var string; validateUrl[]; string = url.split['?'][1]; if[!string]{ string = url; } return string; } function getValue[key]{ var match = table[key] || null; if[!match]{ return "undefined"; } return match; } buildTable[]; this.getKeys = getKeys; this.getQuerystring = getQuerystring; this.getValue = getValue; }
9 vàfunction QuerystringTable[_url]{ // private var url = _url, table = {}; function buildTable[]{ getQuerystring[].split['&'].filter[validatePair].map[parsePair]; } function parsePair[pair]{ var splitPair = pair.split['='], key = decodeURIComponent[splitPair[0]], value = decodeURIComponent[splitPair[1]]; table[key] = value; } function validatePair[pair]{ var splitPair = pair.split['=']; return !!splitPair[0] && !!splitPair[1]; } function validateUrl[]{ if[typeof url !== "string"]{ throw "QuerystringTable[] :: : expected string, got " + typeof url; } if[url == ""]{ throw "QuerystringTable[] :: Empty string given for argument "; } } // public function getKeys[]{ return Object.keys[table]; } function getQuerystring[]{ var string; validateUrl[]; string = url.split['?'][1]; if[!string]{ string = url; } return string; } function getValue[key]{ var match = table[key] || null; if[!match]{ return "undefined"; } return match; } buildTable[]; this.getKeys = getKeys; this.getQuerystring = getQuerystring; this.getValue = getValue; }
0 sẽ trả về{ "foo?" : "bar baz", "ampersand" : "this thing: &" }
1{ "foo?" : "bar baz", "ampersand" : "this thing: &" }
Bây giờ bạn có thể nhận thấy ngay lập tức rằng cú pháp là khác nhau do kết quả của một chức năng. Thay vì
2, đó là{ "foo?" : "bar baz", "ampersand" : "this thing: &" }
3. Chà, tôi nghĩ về điều đó :]{ "foo?" : "bar baz", "ampersand" : "this thing: &" }
Đây là phương pháp thứ hai:
2]
4{ "foo?" : "bar baz", "ampersand" : "this thing: &" }
onload=function[]{ $_GET={}//the lack of 'var' makes this global str=location.search.split['&']//not '?', this will be dealt with later for[i in str]{ REG=RegExp['[[^?]*]=[[^?]*]'].exec[str[i]] $_GET[REG[1]]=REG[2] } }
Hãy chứng kiến! $ _Get hiện là một đối tượng chứa một chỉ mục của mọi đối tượng trong URL, vì vậy bây giờ điều này là có thể:
$_GET['ducksays']//returns 'quack'
Và điều này là có thể
for[i in $_GET]{ document.write[i+': '+$_GET[i]+''] }
Điều này chắc chắn là không thể với chức năng.
Một lần nữa, tôi không đề xuất mã cũ này. Nó được viết rất tệ.