Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在另一个php文件中从ajax获取变量_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript 如何在另一个php文件中从ajax获取变量

Javascript 如何在另一个php文件中从ajax获取变量,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,问题是,当我点击“提交数据”按钮时,我得到了响应(这是正确的),但当我点击“转到php文件”链接(与之前的php文件相同)时,我得到了未定义的index:firstname和未定义的index:lastname错误。我怎样才能修好它 这是我的密码: <html> <head> <script> function ajax_post(){ // Create our XMLHttpRequest object

问题是,当我点击“提交数据”按钮时,我得到了响应(这是正确的),但当我点击“转到php文件”链接(与之前的php文件相同)时,我得到了未定义的index:firstname和未定义的index:lastname错误。我怎样才能修好它

这是我的密码:

<html>
<head>
    <script>
        function ajax_post(){
            // Create our XMLHttpRequest object
            var hr = new XMLHttpRequest();
            // Create some variables we need to send to our PHP file
            var url = "my_parse_file.php";
            var fn = document.getElementById("first_name").value;
            var ln = document.getElementById("last_name").value;
            var vars = "firstname="+fn+"&lastname="+ln;
            hr.open("POST", url, true);
            // Set content type header information for sending url encoded variables in the request
            hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            // Access the onreadystatechange event for the XMLHttpRequest object
            hr.onreadystatechange = function() {
                if(hr.readyState == 4 && hr.status == 200) {
                    var return_data = hr.responseText;
                    document.getElementById("status").innerHTML = return_data;
                }
            }
            // Send the data to PHP now... and wait for response to update the status div
            hr.send(vars); // Actually execute the request
            document.getElementById("status").innerHTML = "processing...";
        }
    </script>
</head>
<body>
    <h2>Ajax Post to PHP and Get Return Data</h2>
    First Name: <input id="first_name" name="first_name" type="text">  <br><br>
    Last Name: <input id="last_name" name="last_name" type="text"> <br><br>
    <input name="myBtn" type="submit" value="Submit Data" onclick="ajax_post();"> <br><br>
    <div id="status"></div>
    <a href="my_parse_file.php">go to the php file</a>
</body>

函数ajax_post(){
//创建XMLHttpRequest对象
var hr=新的XMLHttpRequest();
//创建一些我们需要发送到PHP文件的变量
var url=“my_parse_file.php”;
var fn=document.getElementById(“名字”).value;
var ln=document.getElementById(“姓氏”).value;
var vars=“firstname=“+fn+”&lastname=“+ln;
hr.open(“POST”,url,true);
//设置用于在请求中发送url编码变量的内容类型标头信息
hr.setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
//访问XMLHttpRequest对象的onreadystatechange事件
hr.onreadystatechange=函数(){
如果(hr.readyState==4&&hr.status==200){
var return_data=hr.responseText;
document.getElementById(“status”).innerHTML=返回数据;
}
}
//立即将数据发送到PHP…并等待更新status div的响应
hr.send(vars);//实际执行请求
document.getElementById(“status”).innerHTML=“处理…”;
}
Ajax发布到PHP并获取返回数据
名字:

姓氏:



和php文件

<?php 

echo 'Thank you '. $_POST['firstname'] . ' ' . $_POST['lastname'] . ', says the PHP file';

?>
<?php 

echo 'Thank you '. $_REQUEST['firstname'] . ' ' . $_REQUEST['lastname'] . ', says the PHP file';

?>

因为两者都是不同的请求:

当您使用AJAX传递参数
firstname
lastname
时。您必须使用
GET
请求在
URL
中传递相同的消息

转到php文件

<?php 

echo 'Thank you '. $_POST['firstname'] . ' ' . $_POST['lastname'] . ', says the PHP file';

?>
<?php 

echo 'Thank you '. $_REQUEST['firstname'] . ' ' . $_REQUEST['lastname'] . ', says the PHP file';

?>

输出:

PHP文件说,谢谢你
abc
xyz


它将在
Submit按钮
Hyperlink

中工作,方法是单击浏览器发送的链接不是POST请求,而是向服务器端发送GET请求。这就是全局数组$\u POST不包含您试图在PHP文件中检索的元素的原因。错误消息指出$\u POST数组中没有类似“firstname”和“lastname”的元素。 建议添加一个检查数组元素是否存在,如下所示:

<?php
    if (isset($_POST['firstname']) && isset($_POST['lastname'])) {
        echo 'Thank you '. $_POST['firstname'] . ' ' . $_POST['lastname'] . ', says the PHP file';
    } else {
        echo 'Nothing to say';
    }

感谢R J的解释。现在我修好了,工作正常


但是我很担心,因为我使用这个代码只是为了训练。在我的主要问题中,我需要通过ajax将真实对象(而不是字符串等)发送到我的php站点,因此我无法将其添加到url,可以吗?

您将在get请求(
href
)上访问php文件,因此这是一个不同的请求。您需要在第二次点击“转到php文件”时将参数发布到php,这将是一个get请求,php在$\u POST superglobal中找不到这些变量。或者使用表单将其与POST一起发布,或者将参数添加到链接中的查询字符串中,并使用GET检索它们。不管怎样,您所做的并不需要ajax。使用
$\u REQUEST
总是一个坏主意,除了一些非常罕见的情况。这不是其中之一。你应该知道,你的数据是从哪里来的。谢谢你的更新。因为我不太擅长PHP,请你更新我的答案。