【问题标题】:Error: Undefined Index while calling Ajax错误:调用 Ajax 时未定义索引
【发布时间】:2015-10-21 18:21:48
【问题描述】:

我面临的问题是我在调用 Ajax 时得到了一个未定义的索引变量。 单击提交按钮时,我需要将“json”数据发布到“update.php”页面。基本上,我需要捕获文本框中的值并将其发送到数据库。

所以,我在提交按钮上创建了一个表单,代码如下:

<form action="update.php" method = "post" class="form-inline">
    <input type="submit" class="btn btn-info" id = "saveEdits" disabled = "disabled" onclick = "updateVal()" name="saveEdits"  value="Update"/>
/form>

此提交按钮调用 UpdateVal 函数,该函数捕获页面上显示的文本框上的值并使用 AJAX 将其发送到另一个 php 页面。

updateVal函数如下:

function updateVal() {

    var node_list = document.getElementsByTagName('input');
    var c = 0;
    var fieldName = [];
    var fieldText = []
    var ID = [];
    for (var i = 0; i < node_list.length; i++) {
        var node = node_list[i];
        if (node.getAttribute('type') == 'text') {
            fieldName[c] = node.name;
            fieldText[c] = node.value;
            ID[c] = node.id;
            c++;
        }
    }
    var postData = {
        fieldName: fieldName,
        fieldText: fieldText,
        ID: ID
    };

    $.ajax({
        type: "post",
        url: "update.php",
        dataType: "json",
        data: {'postData' : JSON.stringify(postData)},
        contentType: 'application/x-www-form-urlencoded; charset=UTF-8'
    });

正在捕获运行时数据,即文本框中的值,并且可以在控制台上显示,但是,当我在 update.php 上发布此数据时,我将在其中捕获 json 并更新数据库,我'我得到错误:

注意:未定义索引:在第 11 行的 update.php 中

下面是我的update.php

<?php
$json = $_POST["postData"];
$result = json_decode($json);
var_dump($result);?>

【问题讨论】:

  • update.php 中只有 4 行。第11行怎么会出错?
  • 你为什么打电话给json_decode?你没有使用JSON.stringify() 编码postData
  • 你是如何调用你的updateVal函数的?可能您的提交按钮还将表单数据发送到 update.php,因为您在 action="update.php" 属性中指定了这一点
  • 因为,我删除了显示错误和其他文件加载的不必要行
  • 我也用过“JSON.stringify()”,但是没用

标签: javascript php jquery html ajax


【解决方案1】:

从表单中删除您的 action 属性,因为您不需要通过 Javascript/AJAX 发送数据。

您现在要做的是:发送数据两次,每次updateVal() 一次,每次默认提交表单处理一次。

由于表单提交的数据不包含名为 postData 的输入,因此您将收到未定义索引错误。

编辑: 您说您对整个 AJAX 主题感到不舒服。 Here 是一个很好的简单答案,涵盖了基础知识。

编辑2:

要监听服务器的响应,请向 ajax-request 添加回调:

$.ajax({
    type: "post",
    url: "update.php",
    dataType: "json",
    data: {'postData' : postData},
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8'
}).done(function (response, textStatus, jqXHR){
    // Show an alert on response
    alert(response);
});

【讨论】:

  • 谢谢,我把{action}属性去掉了,现在只刷新页面,没有任何反应。所有,我正在尝试确保将 json 发送到 update.php 页面。我正在使用 echo 语句,但没有显示任何内容。
  • 我添加了一个简单的例子如何监听答案
  • "从表单中删除您的操作属性,因为您通过 Javascript/AJAX 发送数据,所以您不需要它。" ——这是个糟糕的建议。 en.wikipedia.org/wiki/Unobtrusive_JavaScript
  • @Quentin 你说得对。但是由于 OP 显然很难理解基础知识,因此最好消除问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
相关资源
最近更新 更多