如何使用PHP接收XMLHttpRequest?

3

我希望能够读取发送到PHP页面的XMLHttpRequest。我正在使用prototype的Ajax.Request函数,并发送一个简单的XML结构。

在尝试打印POST数组时,我没有得到任何输出。

非常感谢任何帮助。

编辑:下面是我的代码

<html>
<head>

<SCRIPT type="text/javascript" src="prototype.js"></script>

</head>
<body>

<script type="text/javascript">

var xml='<?xml version=1.0 encoding=UTF-8?>';
xml=xml+'<notification>';
xml=xml+'heya there';
xml=xml+'</notification>';
xml=xml+'</xml>';


var myAjax = new Ajax.Request('http://localhost:8080/post2.php',{
    contentType: 'text/xml',
    parameters: xml,
    method: 'post',
    onSuccess: function(transport){ alert(transport.status); alert(transport.responseText); }
});

</script>

</body>
</html>

post2.php

Welcome <?php print_r($_POST); ?>!<br />

谢谢您的回复,请查看上面的编辑获取代码。 - screenshot345
1
你的结果是得到了 "欢迎 Array()!" 吗? - Joseph
是的,约瑟夫,这正是我得到的。我希望能够获得xml返回。由于我被迫使用的服务器,这需要是text/xml内容类型。 - screenshot345
4个回答

4

您可以像读取普通请求变量一样来读取它。

$_GET['varname']$_POST['varname']


3
除非我操作有误,否则当我使用print_r $_POST时只会得到一个空数组。在我的ajax调用中,我的参数应该只是以'<xml>...</xml>'格式的xml字符串,对吗?感谢您的帮助。 - screenshot345
2
你可以尝试使用 print_r($_GET),看看是否以某种方式通过 GET 发送。 - chris12892
1
就像 @Adrian 一样,我得到了一个空字符串。 - tony gil

3

php://input 允许你读取原始的 POST 数据,例如:

Welcome <?php print(file_get_contents('php://input')); ?>!<br />

注意:在 enctype="multipart/form-data" 的情况下,php://input 不可用。

$rawData=file_get_contents('php://input'); // 完美的点赞 :) - tony gil

1
当您使用“method:post”并且想要发送一个post body时,您需要参数postBody。因此,类似以下内容的代码可能有效:
var myAjax = new Ajax.Request('http://localhost:8080/post2.php',{
    contentType: 'text/xml',
    postBody: xml,
    method: 'post',
    onSuccess: function(transport){
        alert(transport.status); alert(transport.responseText);
    }
});

但是为什么你要在内容周围建立一个 XML 文档呢?你可以直接发送消息 "heya there",不需要将其包裹在 XML 中。
编辑:在这里你会找到所有的 Ajax.Request 选项:http://www.prototypejs.org/api/ajax/options

1

1
Col所指的是这里:http://us2.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data - Joseph
直接从文档中翻译,"警告 该功能在 PHP 5.6.0 中已被弃用,并在 PHP 7.0.0 中被删除。" - Mark Carpenter Jr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接