如何验证服务器收到我的 Ajax 字符串查询?
How to verify receipt of my Ajax string query by the server?
我正在使用 Javascript 通过 Ajax 将表单数据发送到 php 以进行验证和邮寄。我命名为 formString 的查询字符串看起来像这样 'name= John Smith'
。我有一个输入字段仅用于测试目的。 Ajax 我的客户端页面和服务器之间的通信正常,我用下面显示的脚本检查成功。
问题是我无法在服务器端捕获 formString 查询。我在下面提供了我用来捕获数据失败的方法。 echo json_encode($name)
没有向 html 服务器返回任何内容。
我尝试使用序列化的多个输入字段值进行查询,但没有成功。我尝试向查询字符串提交一个仅包含名字 'John' 的简单字符串,但它也不起作用。
processForm()
var name = document.getElementById("fullName").value;
var formString = name;
var name = document.getElementById("fullName").value;
var formString = name;
var xhr = new XMLHttpRequest();
xhr.open('POST', formfile.php, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.onreadystatechange = function () {
if(xhr.readyState == 4 && xhr.status == 200) {
var result = xhr.responseText;
xhr.send(formString);
button.addEventListener("click", function(event) {
event.preventDefault();
processForm();
PHP 片段:
header('Content-Type: application/json');
function is_ajax_request(){
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
}
if(is_ajax_request()) {
$Ajax_results = array (
'Testing Text' => 'Hello World',
'Your Ajax submittal succeeded.
);
echo json_encode($Ajax_results);
} else {
$None_Ajax_results = array (
'errors' => 'None Ajax - short'
'Your Ajax submittal failed. Errors.'
);
echo "Form is Non Ajax Submitted";
echo json_encode($None_Ajax_error);
exit;
}
定义和设置变量:
global $name;
$errors = null;
if (isset($_POST['name'])) { $name = $_POST['name']; }
else { $name = ''; }
echo '$name';
echo json_encode($name);
如果我正确地阅读了你的问题并假设你在 Ajax 和你所说的服务器之间有适当的心跳,请快速查看你的代码,前提是你没有正确格式化你的 "formString"。为了让您的 formString 正确显示在 $_POST['name'] 中,它应该是:
var formString = "name="+name
这是因为发送的 post 字符串(在您的情况下为 "formString")应具有以下格式:
field1=val1&field2=val2& ... fieldN=valN
其中说明了每个字段的名称,后跟“=”和字段值。多个字段由'&'字符分隔。 PHP 中的哪个将转换为
$_POST = {field1=>val1, field2=>val2, ... fieldN=>valnN}
在服务器端。这当然不是上面的文字代码,而是标准 API 的示例。仔细看看如何为 HTML GET/POST
格式化 Post 字符串
我正在使用 Javascript 通过 Ajax 将表单数据发送到 php 以进行验证和邮寄。我命名为 formString 的查询字符串看起来像这样 'name= John Smith'
。我有一个输入字段仅用于测试目的。 Ajax 我的客户端页面和服务器之间的通信正常,我用下面显示的脚本检查成功。
问题是我无法在服务器端捕获 formString 查询。我在下面提供了我用来捕获数据失败的方法。 echo json_encode($name)
没有向 html 服务器返回任何内容。
我尝试使用序列化的多个输入字段值进行查询,但没有成功。我尝试向查询字符串提交一个仅包含名字 'John' 的简单字符串,但它也不起作用。
processForm()
var name = document.getElementById("fullName").value;
var formString = name;
var name = document.getElementById("fullName").value;
var formString = name;
var xhr = new XMLHttpRequest();
xhr.open('POST', formfile.php, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.onreadystatechange = function () {
if(xhr.readyState == 4 && xhr.status == 200) {
var result = xhr.responseText;
xhr.send(formString);
button.addEventListener("click", function(event) {
event.preventDefault();
processForm();
PHP 片段:
header('Content-Type: application/json');
function is_ajax_request(){
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
}
if(is_ajax_request()) {
$Ajax_results = array (
'Testing Text' => 'Hello World',
'Your Ajax submittal succeeded.
);
echo json_encode($Ajax_results);
} else {
$None_Ajax_results = array (
'errors' => 'None Ajax - short'
'Your Ajax submittal failed. Errors.'
);
echo "Form is Non Ajax Submitted";
echo json_encode($None_Ajax_error);
exit;
}
定义和设置变量:
global $name;
$errors = null;
if (isset($_POST['name'])) { $name = $_POST['name']; }
else { $name = ''; }
echo '$name';
echo json_encode($name);
如果我正确地阅读了你的问题并假设你在 Ajax 和你所说的服务器之间有适当的心跳,请快速查看你的代码,前提是你没有正确格式化你的 "formString"。为了让您的 formString 正确显示在 $_POST['name'] 中,它应该是:
var formString = "name="+name
这是因为发送的 post 字符串(在您的情况下为 "formString")应具有以下格式:
field1=val1&field2=val2& ... fieldN=valN
其中说明了每个字段的名称,后跟“=”和字段值。多个字段由'&'字符分隔。 PHP 中的哪个将转换为
$_POST = {field1=>val1, field2=>val2, ... fieldN=>valnN}
在服务器端。这当然不是上面的文字代码,而是标准 API 的示例。仔细看看如何为 HTML GET/POST
格式化 Post 字符串