关于使用XHR的问题

时间:2011-08-05 04:00:35

标签: javascript xmlhttprequest

我是使用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脚本将会做更多的事情,但我只是想首先回显这些值,以确保它们确实在那里。但他们不是。有谁想?

3 个答案:

答案 0 :(得分:0)

req.open('POST','file:///getmessage.php','false');更改为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);

答案 1 :(得分:0)

reg.send不会刷新您的页面,它会将您的数据发布到网址,并且返回的数据位于req.responseText或req.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");
}
}

答案 2 :(得分:0)

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

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

它不应该在这种特殊情况下有所作为,但是FYI:通常,使用==和!=测试空字符串是危险的。在Javascript中,uninitializedundefinednullNaN('非数字'的保留字)和''(空字符串)是不同的值,如果你不是很小心,因此很容易忘记可能导致未定义或无效变量的情况,因为他们中的大多数人直觉上觉得他们应该返回空字符串或0。由于Javascript非常松散的类型转换,这可能会变得更加棘手。如果您不小心,最终可以将0false这样的术语类型化为字符串,然后将这两个术语评估为trueUndefinedNaN,空字符串和null在被视为布尔值时全部评估为false,但在使用等价运算符时,它们都被视为不同的{{1 }和==)。

如果你想确保一个String有一个非空值而且还没有未定义,null等,你可能想先将变量测试为布尔值,然后将它与emptystring进行比较:

!=

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