如何用PHP打印JavaScript

如何用PHP打印JavaScript,javascript,php,jquery,Javascript,Php,Jquery,我需要向PHP传递一些JS变量,我遇到了一些问题 我尝试了以下方法: $product_id = "<script> var prod_id_one = $('ul.products li:nth-child(1) a.button').attr('data-product_id')</script>"; echo $product_id; product\u id=“var prod\u id\u one=$('ul.products li:nth child(1)a

我需要向PHP传递一些JS变量,我遇到了一些问题

我尝试了以下方法:

$product_id = "<script> var prod_id_one = $('ul.products li:nth-child(1) a.button').attr('data-product_id')</script>";
echo $product_id;
product\u id=“var prod\u id\u one=$('ul.products li:nth child(1)a.button').attr('data-product\u id')”;
echo$product\u id;
但这只是将其打印为字符串:

`<script> var prod_id_one = $('ul.products li:nth-child(1) a.button').attr('data-product_id');</script>`
`var prod_id_one=$('ul.products li:n子(1)a.button').attr('data-product_id')`

我将如何存储JS变量,然后使用PHP
echo
?我对PHP很陌生,所以任何帮助都将不胜感激

JavaScript在客户端运行,而PHP在服务器上运行。它们在页面生命周期中完全不同的时间执行,因此它们无法以您使用的方式进行通信


相反,您可以使用AJAX将JS中的值发送到PHP页面。

按照您的方式执行,这是不可能的。PHP不能在同一页面中直接“读取”或“与”javascript交互

您必须了解PHP是一个预处理器,它在服务器上生成HTML,然后将生成的页面发送到客户端。在本页中,PHP代码已完全消失。您只能看到它生成的内容(即HTML或JS)。然后,javascript代码运行,它不知道它是使用PHP生成的,也不知道PHP的存在

为了将变量传递给PHP脚本,必须使用GET或POST方法调用该文件:

(JS)

(myScript.php)


当然,这是一个非常基本的例子。永远不要直接阅读和使用发送到PHP的内容(就像我刚才做的那样),因为任何人都可以注入他们想要的任何东西

谢谢您的帮助,非常感谢!我已经按照建议使用ajax完成了这项工作:

<script type="text/javascript">
jQuery("document").ready(function(){
    var $ = jQuery
    $("form").submit(function(){
        var data = "";
        data = $(this).serialize() + "&" + $.param(data);
        var prod_id_one =   $('#prod1').val();
        var prod_id_two =   $('#prod2').val();
        var prod_id_three = $('#prod3').val();
        var prod_id_four =  $('#prod4').val();

        $.ajax({
            type: "GET",
            url: "my_ajax_url_here", 
            data: data,
            success: function(data){ 
                window.location = "price-calculator?width="+ $('#wpti-product-x').val() + "&height=" +  $('#wpti-product-y').val() + "&id1=" + prod_id_one + "&id2=" + prod_id_two + "&id3=" + prod_id_three + "&id4=" + prod_id_four;
            }
        });
        return false;
    });
});
</script> 

jQuery(“文档”).ready(函数(){
var$=jQuery
$(“表格”)。提交(函数(){
var数据=”;
data=$(this.serialize()+“&”+$.param(data);
var prod_id_one=$('#prod1').val();
var prod_id_two=$('#prod2').val();
var prod_id_three=$('prod3').val();
var prod_id_four=$('#prod4').val();
$.ajax({
键入:“获取”,
url:“我的网址”,
数据:数据,
成功:函数(数据){
window.location=“价格计算器?width=“++”(“#wpti-product-x”).val()+”&height=“++”(“#wpti-product-y”).val()+”&id1=“+prod_id_one+”&id2=“+prod_id_two+”&id3=“+prod_id_two+”&id4=“+prod_id_four;
}
});
返回false;
});
});

它现在正在使用上述代码。再次感谢

PHP是服务器端,Javascript是客户端。因此,PHP所做的工作比Javascript更重要。如果你想在说“从Javascript到PHP”时传递一些信息,你必须向服务器发出请求(例如通过链接、表单或Ajax调用)。我认为它应该像你那样工作。您使用的是框架吗?能否确保代码中没有类似于
htmlspecialchars
的内容?谢谢@Pierre Jean没有特殊的框架,也没有
htmlspecialchars
。我将不得不重新思考上一步,并对其进行一些修改。@Pierre Jean绝对不会。。。我知道他想用PHP打印javascript代码。这是可能的,也很容易做到。但事实上,如果他想做相反的事情(javascript-var到php),那就行不通了……谢谢。我有一些想法我会试试。谢谢你的全面回答。不用担心。如果您觉得它很有价值,如果您验证它,我将不胜感激:)
    $variable1 = $_GET['variable1']; // or POST if you're using post
    $variable2 = $_GET['variable2'];

    echo $variable1 . " " . $variable2; // Concatenates as "Hello world!" and prints it out.
//The result of the PHP file is sent back to Javascript when it's done.
<script type="text/javascript">
jQuery("document").ready(function(){
    var $ = jQuery
    $("form").submit(function(){
        var data = "";
        data = $(this).serialize() + "&" + $.param(data);
        var prod_id_one =   $('#prod1').val();
        var prod_id_two =   $('#prod2').val();
        var prod_id_three = $('#prod3').val();
        var prod_id_four =  $('#prod4').val();

        $.ajax({
            type: "GET",
            url: "my_ajax_url_here", 
            data: data,
            success: function(data){ 
                window.location = "price-calculator?width="+ $('#wpti-product-x').val() + "&height=" +  $('#wpti-product-y').val() + "&id1=" + prod_id_one + "&id2=" + prod_id_two + "&id3=" + prod_id_three + "&id4=" + prod_id_four;
            }
        });
        return false;
    });
});
</script>