1

我使用以下代码发布了内容:

function checkphp() {
    var xml = new XMLHttpRequest();
    xml.open("POST", 'testphp.php');
    xml.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xml.send('alame=Henry');
    xml.onreadystatechange = function() {
        if (xml.readyState == 4 && xml.status == 200) {
            document.body.innerHTML = xml.responseText;
        }
    }
}

我试过这个:

echo($_POST['alame']) or die("Nothing was posted");

但它不起作用......它吐出'1'。有什么建议吗?

4

2 回答 2

1

我测试了你的脚本,我们可以看到你有这样的 testphp.php 消息:

<?php
//
//var_dump($_POST);
//echo($_POST['alame']) or die("Nothing was posted");
//
echo $_POST['alame'];
?>

“Henry”将按预期显示在文档正文中。

有了这个:

echo($_POST['alame']) or die("Nothing was posted");

1 被退回。

echo 在这里用作函数,但不能,请参见http://fr.php.net/echo

echo 实际上不是一个函数(它是一种语言结构),因此您不需要使用括号。echo(与其他一些语言结构不同)的行为不像函数,因此它不能总是在函数的上下文中使用。

所以 1 在这种情况下是一个不可预测的结果,我没有解释。

或者你可以使用这个:

echo isset($_POST['alame']) ? $_POST['alame'] : "Nothing was posted";
于 2013-11-09T21:35:41.333 回答
0

你得到1是因为 PHP 正在回显 ($_POST['alname'])( true) OR die; 的值;

$someVar = 'test';
$someBool = false;

$a = ($someVar) || die();
echo $a; // 1
var_dump($a); //bool(true)

$a = ($someBool) || die(); // dies

在 JavaScript 等语言中,您可能会期待不同的行为:

// In JS
var someVal = false;
var somethingElse = someVal || "fallback";
console.log(somethingElse); // "fallback"

然而,在 PHP 中,整个表达式都会被计算,所以

// In PHP
$someVal = false;
$somethingElse = $someVal || "fallback";
echo $somethingElse; // 1

$someVal || "fallback"评估为真,因为 PHP 将它们归结为(false || true) => true

@jacouh 是错误的,因为它是不可预测的1,但是非常正确的是你应该以不同的方式检查你的变量,例如三元或一些类似的方法,例如

if(!isset($_POST['alame']))
    die("Noting was posted");

// Continue and do something with $_POST['alame'];
于 2013-11-10T06:00:27.987 回答