如何通过Javascript脚本请求PHP页面并将数据传递给它?然后我如何让PHP脚本将数据传递回Javascript脚本?
client.js:
data = {tohex: 4919, sum: [1, 3, 5]};
// how would this script pass data to server.php and access the response?
server.php:
$tohex = ... ; // How would this be set to data.tohex?
$sum = ...; // How would this be set to data.sum?
// How would this be sent to client.js?
array(base_convert($tohex, 16), array_sum($sum))
答案 0 :(得分:19)
从PHP传递数据很简单,您可以使用它生成JavaScript。另一种方法有点难 - 你必须通过Javascript请求调用PHP脚本。
一个例子(为简单起见,使用传统的事件注册模型):
<!-- headers etc. omitted -->
<script>
function callPHP(params) {
var httpc = new XMLHttpRequest(); // simplified for clarity
var url = "get_data.php";
httpc.open("POST", url, true); // sending as POST
httpc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
httpc.setRequestHeader("Content-Length", params.length); // POST request MUST have a Content-Length header (as per HTTP/1.1)
httpc.onreadystatechange = function() { //Call a function when the state changes.
if(httpc.readyState == 4 && httpc.status == 200) { // complete and no errors
alert(httpc.responseText); // some processing here, or whatever you want to do with the response
}
};
httpc.send(params);
}
</script>
<a href="#" onclick="callPHP('lorem=ipsum&foo=bar')">call PHP script</a>
<!-- rest of document omitted -->
无论get_data.php
产生什么,它都会出现在httpc.responseText中。错误处理,事件注册和跨浏览器XMLHttpRequest兼容性留给读者简单的练习;)
答案 1 :(得分:9)
前几天我遇到了类似的问题。说,我想将数据从客户端传递到服务器并将数据写入日志文件。这是我的解决方案:
我的简单客户端代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
<title>Test Page</title>
<script>
function passVal(){
var data = {
fn: "filename",
str: "this_is_a_dummy_test_string"
};
$.post("test.php", data);
}
passVal();
</script>
</head>
<body>
</body>
</html>
服务器端的php代码:
<?php
$fn = $_POST['fn'];
$str = $_POST['str'];
$file = fopen("/opt/lampp/htdocs/passVal/".$fn.".record","w");
echo fwrite($file,$str);
fclose($file);
?>
希望这适合您和未来的读者!
答案 2 :(得分:7)
我使用JSON作为格式,使用Ajax(实际上是XMLHttpRequest)作为客户端 - >服务器机制。
答案 3 :(得分:2)
有几种方法,最突出的是获取表单数据或获取查询字符串。这是使用JavaScript的一种方法。当您单击链接时,它将调用_vals('mytarget','theval'),它将提交表单数据。当您的页面回发时,您可以检查是否已设置此表单数据,然后从表单值中检索它。
<script language="javascript" type="text/javascript">
function _vals(target, value){
form1.all("target").value=target;
form1.all("value").value=value;
form1.submit();
}
</script>
或者,您可以通过查询字符串获取它。 PHP有你的_GET和_SET全局函数来实现这一点,使它更容易。
我确信可能会有更多更好的方法,但这些只是我想到的一些方法。
编辑:基于其他人使用上述方法所说的基础,你会有一个像
这样的锚标签<a onclick="_vals('name', 'val')" href="#">My Link</a>
然后在PHP中,您可以使用
获取表单数据$val = $_POST['value'];
因此,当您单击使用JavaScript的链接时,它将发布表单数据,当页面从此单击发回时,您可以从PHP中检索它。
答案 4 :(得分:2)
使用Cookie是一种简单的方法。您可以使用jquery和pluging jquery.cookie或创建自己的。 使用Jquery + jquery.cookie,例如
<script>
var php_value = '<?php echo $php_variable; ?>';
var infobar_active = $.cookie('php_value');
var infobar_alert = any_process(infobar_active);
//set a cookie to readit via php
$.cookie('infobar_alerta', infobar_alerta );
</script>
<?php
var js_value = code to read a cookie
?>
我发现这个有用的服务器端和混合框架: http://www.phplivex.com/ http://www.ashleyit.com/rs/
在我遇到JQuery(ajax,加载等)之前,我一直在使用Ashley的RSJS脚本来更新HTML中的值而没有任何问题
答案 5 :(得分:1)
您可以将数据从PHP传递到javascript,但是从javascript获取数据到PHP的唯一方法是通过AJAX。
原因是你可以通过PHP构建一个有效的javascript但是为了获取PHP的数据,你需要再次运行PHP,并且由于PHP只运行来处理输出,你需要一个页面重新加载或异步查询。
答案 6 :(得分:-1)
另一种将数据从php交换到javascript或反之亦然的方法是使用cookies,你可以在php中保存cookie并通过你的javascript阅读,为此你不必使用表格或ajax