js和php在同一个文件中相互获取值的问题

文件名是index.php
<script>
var linka;
linka=window.location.href;
</script>
<?php
$ch[0]="<script>document.write(linka);</script>";
echo $ch[0]."<br />";
<script>
到这步为止,php获得js的变量非常顺利
下面接着
<script>
var k;
k="<?php echo $ch[0];?>";
alert(k);
</script>
为什么输出是"alert(k);",而不是k的值?求解释

你好php是服务端脚本语言,js是浏览器端脚本语言,除非使用ajax进行数据提交否则,一但服务端生成好页面传到浏览器端后就不再参与浏览器端的“运算”,所以你想在同一个页面中不重新进行请求就js和php相互获取值是不现实的。

另:

你的代码分析如下:

<script>

var linka;

linka=window.location.href;

</script>

<?php

$ch[0]="<script>document.write(linka);</script>";

echo $ch[0]."<br />";

<script>

到这步为止,php获得js的变量非常顺利

下面接着

<script>

var k;

k="<?php echo $ch[0];?>";

alert(k);

</script>

其实你的整个页面都是php的,执行

$ch[0]="<script>document.write(linka);</script>";

这一句的时候,php的$ch[0]仅仅只是被赋予了"<script>document.write(linka);</script>"这个字符串,js代码并没有运行.php也并没有获得js的变量!获得的只是字符串而已.

追问

事实上$ch[0]被赋予的并不是字符串,你可以自己找个环境试试。

因为新浪专业版微博认证会传递给网站首页带参数的url,又一定要在网站首页调用一个js写的认证函数,所以才会嫌麻烦看看能不能写在一起。

给你看这个程序的一部分,再给你看看运行效果:

 

 

可见在php中将js和php混写是完全没有问题的。

追答$ch[0]="<script>document.write(linka);</script>";
 
echo $ch[0]."<br />";

这部分,实际上用php生成是多此一举。

因为传到浏览器端时输是

<script>document.write(linka);</script>

直接就写

<script>document.write(linka);</script>
不需要放到php里,就能实现。

 

php在服务端讲"<script>document.write(linka);</script>"这个字符串赋值到$ch[0],后面就输出$ch[0]也就是"<script>document.write(linka);</script>"这个字符串到浏览器端页面后,才由浏览器端来执行document.write(linka).

 

不是说不能php和JS能混写就可以在同一页面上只通过进行交互。而是php和js的执行环境不一样,一个在服务端,一个在客户端。要想在服务端获取浏览器端的数据,则必须有“请求——应答”的过程。

<script> 
var k; 
k="<?php echo $ch[0];?>"; 
alert(k); 
</script>

这一段传到浏览器端后就是:<script> 

var k; 
k="<script>document.write(linka);</script>"
alert(k); 
</script>

另请注意:页面在服务端生成之后,要想再和服务端(这里即你的php程序)交互,则必须要通过再次的请求才行。这点,可以去补一下B/S模式的运行机制。

 

要从浏览器端的页面上传数据给服务端程序,建议还是通过ajax进行,如果不用ajax就用隐藏的iframe嵌入页面并将提交数据目标指向该iframe,然后在返回给iframe的代码里使用parent对象与父页面交互。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-10
你这个浏览器中显示的值是因为<script>document.write(linka);</script>这句话显示的并不是php获取到了js变量中的值。如果你一定要用的话,就在js中写location.href="location.href?a="+linka;
在PHP中写$ch[0]
=$_GET["a"];就可以获得了
对了linka里你要用截取字符串的函数把前半部分截掉,这点你自己试试。追问

新浪调用应用时会给你注册应用的实际链接post一点信息

专业版应用框架会GET给您的应用以下信息:

cid    

viewer         

sub_appkey      

tokenString       

 

但是添加授权也必须在注册应用的这个链接的页面,程序是新浪的JS程序!

通过ajax可以解决这个问题,但是能否把两者写在一起呢?

参见对另一位的追问,只是js变量获取php变量的时候有点问题.

追答

不用ajax的话,你就用隐藏的div,然后通过js获取div中的php传下来的$ch[0]

第2个回答  推荐于2016-01-08

首先要明白,javascript和php是2门不同的程序语言,他们运行的环境截然不同


javascript的环境是浏览器,php的环境是服务器


二者是不能直接进行数据交换的,但是我们可以架设一个桥梁来实现,这里先给几个方法,希望能达到抛砖引玉的效果


    最常用的大概要属ajax了,这里js向php发送的,和php向js回应的都是字符串类型的数据,这些字符串可以根据需要被转换成不同类型(对象,数字,bool值)。

    把php输入到html中,js通过dom节点来访问和修改这些值,至于php如何接收这些值,不是直接丢到form里,get或post过去就结束了么?

    极端情况的话,也可以直接把php的值输出到js代码里。

    例如 var a = '<?php echo $v;?>';

    php照样通过一个表单提交来获取他们。

js和php在同一个文件中相互获取值的问题
你好php是服务端脚本语言,js是浏览器端脚本语言,除非使用ajax进行数据提交否则,一但服务端生成好页面传到浏览器端后就不再参与浏览器端的“运算”,所以你想在同一个页面中不重新进行请求就js和php相互获取值是不现实的。 另: 你的代码分析如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19...

js如何取php文件 中的值
JS的运行是在客户端,php的运行是在服务器端,这两者之间的通信必须要借助第三方介质,最最简便的方法就是,你可以在PHP代码中将$a的值赋给你网页上面一个隐藏的元素,然后JS再去取这个隐藏元素的值。当然也可以在PHP代码段中操作JS,echo "var a = "+$a+"";但是这样做并不能保证一定能完成你...

PHP与JS对接的问题,有前端页面(html的)和后端页面(PHP的),JS怎么获取...
大致的前后端交互可以这样实现:首先,前端js通过ajax请求后端php,请求数据推荐json格式 后端php收到请求后,解析数据并处理 后端返回处理后结果,不推荐var_dump打印,会打印多余的无用信息,返回时json_encode()转成json格式再返回 前端js收到返回值后解析json数据即可 ...

同页面中php代码如何取用js的参数
对于浏览器来说,不存在php 对于服务器来说,不存在js 所以,你上面的代码,当从服务器到达你 的浏览器后,代码是这样的: function 函数名(参数){ ("#id").html("");} 也就是#id的html元素为空

如何在当前页面用php 获取js 变量的值
1、首先我们创建一个test的php文件。2、在里面添加html需要的代码。3、我们在里面添加js脚本,定义一个a变量100。4、现在我们在底部添加php中代码,其中定义一个b变量默认为0,准备用它来接收js中的a的值。5、接着我们在script里面使用writeln输出a,并赋值给php中的变量b,在最后echo输出查看b中的值...

PHP怎么读取JS文件里的数据
按格式序列成字符串...然后放到hidden里提交给服务器 或者ajax~必须有办法序列成字符串... 如果用js框架的话..可以尝试某些框架序列成json的函数 然后在php上可以用json_decode解析数据

关于php读取js的变量值问题
usermoneytemp="if(um!=null)document.write(um);"; 是一个字符串,浏览器会把这字符串显示为10,但是在PHP里面始终是个字符串,转换为数字就是0。补充:是的,string类型的常量"if(um!=null)document.write(um);"转换为整数结果为0,因为转换时候遇到非数字字符就终止,第一个<就是非数字的。

JS传值给PHP问题请教
post 或者 get 或者个 a.php?id=值 在 a.php页面就可以用 $_GET['id']; 来获取值 不想刷新页面的话 可以用 ajax 方式 与a.php 通讯 参考资料:http:\/\/blog.wumashi.com

如何用JS调用PHP文件并传递参数
text\/javascript" src="b.php?>当执行a.html文件时,就会调用b.php文件,并将b.php文件的输出作为JS语句来执行,所以此处会弹出一个提示框,内容为JS变量jstext的值,也就是在PHP文件中赋给jstext的值.小结: 在HTML里用JS 调用文件的方式调PHP文件,则PHP文件的输出将会被调用页作为JS的代码来用.

js值在同一页面传给PHP
php是在后台运行,然后生成HTML代码和JS代码,然后输出到前台,然后用户的浏览器运行这些HTML和JS代码。所以JS代码是不能传值给php的,因为JS运行时php早已运行结束了。 dommy529 | 发布于2012-05-31 举报| 评论 0 7 js和php是2码事,比混淆了!一个是客户端,一个是服务器端 jiangxibaiyi | 发布于2012-05...

相似回答