php取js变量,从PHP到JavaScript获取变量

更新:我完全重写了这个答案。 旧代码仍在底部,但我不建议这样做。

您可以通过两种主要方法来访问for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}变量:

通过PHP的for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}数组(关联数组)。

通过JavaScript的for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}对象。

使用PHP,您可以制作一个“模板”,其内容如下:

var $_GET = JSON.parse("<?php echo json_encode($_GET); ?>");

但是,我认为这里的语言混合是草率的,应尽可能避免。 无论如何,我真的想不出任何充分的理由在PHP和JavaScript之间混合数据。

真正归结为:

如果可以通过JavaScript获取数据,请使用JavaScript。

如果无法通过JavaScript获取数据,请使用AJAX。

如果您另外需要与服务器通信,请使用AJAX。

因为我们在这里谈论for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}(或者至少我以为是我写原始答案的时候),所以您应该通过JavaScript来获取它。

在原始答案中,我有两种获取查询字符串的方法,但它太乱且容易出错。 这些现在位于此答案的底部。

无论如何,我设计了一个不错的小“类”来获取查询字符串(实际上是一个对象构造函数,请参阅MDN的OOP文章中的相关部分):

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;

}

JS领域

for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}

for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}

for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}

它更加健壮,不依赖于正则表达式,结合了前面两种方法的最佳部分,并将验证您的输入。 您可以给它查询URL以外的查询字符串,如果输入不正确,它将大声失败。 而且,就像一个好的对象/模块一样,它不知道也不关心类定义之外的任何东西,因此它可以与任何东西一起使用。

构造函数自动填充其内部表并解码每个字符串,例如for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}在内部将变为:

{

"foo?" : "bar baz",

"ampersand" : "this thing: &"

}

实例化时,所有工作都为您完成。

使用方法如下:

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

那好多了。 并将url部分留给程序员,既可以在非浏览器环境中使用它(在2940256856884516979712和2940256856884516979713中都进行了测试),还允许您比较两个不同的查询字符串的情况。

var qs1 = new QuerystringTable(/* url #1 */),

qs2 = new QuerystringTable(/* url #2 */);

if (qs1.getValue("vid") !== qs2.getValue("vid")){

// Do something

}

正如我上面所说的,此答案引用了两种凌乱的方法。 我将它们保留在此处,因此读者不必遍历修订历史记录即可找到它们。 他们来了:

1)for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}。这只是获取URL并直接用RegEx解析

for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}

简单,如果查询字符串为for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

},则$_GET(key)应该返回quack,而$_GET('bearsays')应该返回growl

现在,您可能会立即注意到,语法是函数的功能有所不同。 而不是2940256884516916979712,而是$_GET(key)。好吧,我想到了:)

这是第二种方法:

2) for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}

for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}

看哪! $ _GET现在是一个对象,其中包含url中每个对象的索引,因此现在可以这样做:

for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}

而且这是可能的

for(i in $_GET){

document.write(i+': '+$_GET[i]+'


')

}

此功能绝对不可能。

同样,我不建议使用此旧代码。 写得不好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值