【问题标题】:How to verify receipt of my Ajax string query by the server?如何验证服务器收到我的 Ajax 字符串查询?
【发布时间】:2019-07-10 18:18:15
【问题描述】:

我正在使用 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 sn-p:

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 发送表单数据的最佳示例和文档是可用的here

标签: php string server verify receipt


【解决方案1】:

如果我正确阅读了您的问题并假设您在 Ajax 和服务器之间有正确的心跳,如您所说,请快速查看您的代码,因为您没有正确格式化您的“formString”。为了让您的 formString 正确显示在 $_POST['name'] 中,它应该是:

var formString = "name="+name

这是因为正在发送的帖子字符串(在您的情况下为“formString”)应具有以下格式:

field1=val1&field2=val2& ... fieldN=valN

每个字段的名称都被说明,后跟“=”和字段的值。多个字段由“&”字符分隔。哪个在 PHP 中将转换为

$_POST = {field1=>val1, field2=>val2, ... fieldN=>valnN}

在服务器端。这当然不是上面的文字代码,而是标准 API 的一个示例。仔细看看如何为 HTML GET/POST 格式化 Post 字符串

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-10
    • 2018-05-09
    • 2012-05-03
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    相关资源
    最近更新 更多