微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何使用php和ajax将GET方法更改为POST方法

我在PHP和ajax文件中将GET方法更改为POST,但这里的逻辑错误是每次我将学生添加数据库中都不起作用.我无法弄清楚这个问题,因为我是AJAX的新手.

这是我的代码

用于添加PHP文件

<?PHP
//I changed to POST
$q1=$_POST["q1"];
$q2=$_POST["q2"];
$q3=$_POST["q3"];

$con = MysqL_connect('localhost', 'root', '');
if (!$con)
 {
 die('Could not connect: ' . MysqL_error());
 }

MysqL_select_db("stud", $con);

$sql="INSERT INTO stud_info(IDno, LName, FName) VALUES ('$q1', '$q2', '$q3')";

if (!MysqL_query($sql,$con))
  {
  die('Error: ' . MysqL_error());
  }


MysqL_close($con);
?>

获得专业证书

<?PHP

$q=$_POST["q"]; //I changed to POST

$con = MysqL_connect('localhost', 'root', '');
if (!$con)
 {
 die('Could not connect: ' . MysqL_error());
 }

MysqL_select_db("stud", $con);

$sql="SELECT * FROM stud_info WHERE IDno like '".$q."%'";

$result = MysqL_query($sql);

echo "<table border='1'>
<tr>
<th>IDno</th>
<th>LName</th>
<th>FName</th>
</tr>";

while($row = MysqL_fetch_array($result))
 {
 echo "<tr>";
 echo "<td>" . $row['IDno'] . "</td>";
 echo "<td>" . $row['LName'] . "</td>";
 echo "<td>" . $row['FName'] . "</td>"; 
 echo "</tr>";
 }
echo "</table>";

MysqL_close($con);
?>

用于ajax的JavaScript它不能很好地工作

// JavaScript Document
var xmlHttp;

function showStud(id)
{ 
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    {
        alert ("browser does not support HTTP Request");
        return;
    }
    var url="getStud.PHP";
    url=url+"?q="+id;   
    xmlHttp.onreadystatechange=stateChanged;
    xmlHttp.open("POST",url,true);
    xmlHttp.send(null);
}

function addStud(id, ln, fn)
{ 
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    {
        alert ("browser does not support HTTP Request");
        return;
    }
    var url="addStud.PHP";
    url=url+"?q1="+id+"&q2="+ln+"&q3="+fn;  
    xmlHttp.onreadystatechange=stateChanged;
    xmlHttp.open("POST",url,true);
    xmlHttp.send(null);
}

function editStud(id, ln, fn)
{ 
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    {
        alert ("browser does not support HTTP Request");
        return;
    }
    var url="editStud.PHP";
    url=url+"?q1="+id+"&q2="+ln+"&q3="+fn;
    xmlHttp.onreadystatechange=stateChanged;
    xmlHttp.open("POST",url,true);
    xmlHttp.send(null);
}

function deleteStud(id)
{ 
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    {
        alert ("browser does not support HTTP Request");
        return;
    }
    var url="deleteStud.PHP";
    url=url+"?q="+id;   
    xmlHttp.onreadystatechange=stateChanged;
    xmlHttp.open("POST",url,true);
    xmlHttp.send(null);
}

function stateChanged() 
{ 
    if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
    { 
        document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
    } 
}

function GetXmlHttpObject()
{
    var xmlHttp=null;
    try
    {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
        //Internet Explorer
        try
        {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}

解决方法:

我想指出的事情很少.首先,您在此处执行stateChanged函数

xmlHttp.onreadystatechange=stateChanged;

并将该函数的RESULT(在本例中为未定义)分配给xmlHttp.onreadystatechange.

现在,当readystate更改时,XMLHttpRequest尝试调用现在未定义的onreadystatechange,因此不会发生任何事情.

试试这个:

function stateChanged(){
    return function(){
        if(xmlHttp.readyState==4){
            if (xmlHttp.status==200){
                document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
            }

        }
    }
}

现在,您仍然将函数的结果分配给http.onreadystatechange,但这次它是一个调用函数而不是undefined.

第二,对于像HTML表单这样的POST数据,使用setRequestHeader()添加HTTP标头,并在send()方法中指定要发送的数据,如下所示:

// Example of deleteStud(id) function
var url="deleteStud.PHP";
xmlHttp.open("POST",url,true);
xmlHttp.onreadystatechange=stateChanged();
xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHttp.send("q="+id);

编辑:

例如,你的showStud函数就是这样的,

function GetXmlHttpObject(){
    // your code
}

function stateChanged(){
    return function(){
        if(xmlHttp.readyState==4){
            if (xmlHttp.status==200){
                document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
            }

        }
    }
}

function showStud(id)
{ 
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null){
        alert ("browser does not support HTTP Request");
        return;
    }
    var url="getStud.PHP";
    xmlHttp.open("POST",url,true);
    xmlHttp.onreadystatechange=stateChanged();
    xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlHttp.send("q="+id);
}

因此,相应地更改其他功能.

重新编辑:

您需要了解的其他关键事项很少.

1)正确的呼叫顺序是:

>新的XMLHttpRequest
> xmlHttp.open()
> xmlHttp.onreadystatechange = …
> xmlHttp.send()

在某些浏览器中,调用.open会清除其上的所有事件处理程序.这允许干净地重复使用相同的xmlHttp对象,这被认为是更高的内存效率(但是如果你正确编码以让GC完成它的工作,那真的无关紧要).所以,只需在onreadystatechange赋值之前放置.open调用,你应该好好去.

2)onreadystatechange不仅仅被解雇了一次.它被多次激活,你需要能够处理它.这些是您需要处理的代码

> 0 UNSENT – 尚未调用open()
> 1 OPENED – 尚未调用send()
> 2 HEADERS_RECEIVED – 已调用send(),并且标题和状态可用
> 3 LOADING下载 – responseText保存部分数据
> 4 RESPONSE准备就绪 – 操作完成

因此,您的错误检查应该在xmlHttp.readyState == 4检查中,如下所示:

if(xmlHttp.readyState==4){
    if (xmlHttp.status==200){
        // your code
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐