关于使用XHR的问题

Questions about using XHR

本文关键字:问题 XHR 于使用      更新时间:2023-09-26

我是使用XMLHttpRequest对象的新手。我想做的是通过XMR打开一个php脚本,并将JavaScript值写入数据库。我不知道怎么做,所以这是我所拥有的。

JavaScript:

function popup(username) {
var message = prompt("Message:","");
if(message != ""){
    var req = new XMLHttpRequest();
    req.open('POST','getmessage.php','false');
    req.send("username=" + username +"&message="+message);
} else {
    alert("Please enter a message");
}
}
PHP文件(getmessage.php):
<?php
$to = $_POST['username']
$message = $_POST['message'];
echo $to + '   ' + $message;
?>

PHP脚本将做更多的事情,但我只想先回显这些值,以确保它们确实在那里。但事实并非如此。的想法吗?

change req.open('POST','file:///getmessage.php','false'); to req.open('POST','getmessage.php',false);

还需要将req.send(username, message);更改为

req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
req.send("username=" + username +"&message="+message);

reg。发送不刷新你的页面,它张贴你的数据到url和返回的数据是在请求。responseText或request。responseXML取决于您的数据类型。如果你想看到你的回复,请这样做

function popup(username) {
var message = prompt("Message:","");
if(message != ""){
    var req = new XMLHttpRequest();
    req.open('POST','getmessage.php','false');
    req.send("username=" + username +"&message="+message);
    alert(req.responseText);
} else {
    alert("Please enter a message");
}
}

正如Jules在他的示例代码中所示,您需要从Javascript输出req.responseText,以便它执行任何操作;HTTP响应不会在窗口中绘制任何内容,它只是将输出放在Javascript变量中供您操作和/或按照您想要的方式显示。您可以弹出它作为一个简单测试的警报。

如果您想尝试直接将响应写入文档,简单/懒惰的方法是在原始页面的标记中放置一个占位符div。在完成req.send(stuff_to_send);之后,您只需执行类似document.getElementById('myDiv').innerHTML = req.responseText;的操作。

在这种特殊情况下应该没有什么区别,但请注意:通常,使用==和!=来测试空字符串是危险的。在Javascript中,uninitialized, undefined, null, NaN("非数字"的保留词)和"(空字符串)是不同的值,如果你不太小心,那么很容易忘记可能导致未定义或空变量的情况,因为它们中的大多数直观地感觉它们应该返回空字符串或0。由于Javascript非常松散的类型转换,这可能会变得更有问题。如果不小心,您可能会将0false这样的术语类型转换为字符串,然后这两个术语都将计算为trueUndefined, NaN,空字符串和null在作为布尔值处理时都计算为false,但在使用等价运算符(==!=)时,它们都被视为不同的。

如果你想确保一个字符串有一个非空的值,也不是未定义的,null等,你会想要测试变量作为一个布尔值,然后比较它的空字符串:

if(myString && myString != "")

另一个方便的解决方法是Javascript只是简单愚蠢的另一种情况:如果你试图引用一个你从未声明过的变量名,它会导致一个致命的错误,并完全停止Javascript的执行。另一方面,如果您试图引用声明的对象的从未声明的属性,它将返回未定义,但不会抛出错误并停止脚本执行。由于您可以通过引用window.varName来访问任何全局变量varName(换句话说:作为window对象的属性),因此只需在对可能不存在的变量的任何引用前面添加window.,就可以使该引用安全。