0

当用户单击表格单元格时,我试图将 jQuery 提取的元素信息发布到一个新页面,该页面将在 sql 查询中使用该信息(在本例中为 id)。即,用户单击一个单元格,他/她单击的作业的 id 为 25,这将被传递到我的 php 页面,该页面在数据库中查询具有该 id 的作业,然后使用所述信息填充页面。然后,用户可以更改查询中的信息并将其提交以更新数据库表。我有来自 click 函数的 id,并且成功警报告诉我信息已发布。问题是当页面打开时,它指出发布的名称索引是未定义的。这是我获取信息的脚本:

        <script>
        $(document).ready(function()
        {
            $("table.jobs tbody td#job").click(function()
            {
                var $this = $(this);
                var col   = $this.text();
                var LeftCellText = $this.prev().text();
                if (col == '')
                alert("Please pick another column");
                else
                $.ajax(
                {
                    type:"POST",
                    url:"../php/jobUpdate.php",
                    data:"name=" + LeftCellText,
                    success: function()
                    {
                        window.location = "../php/jobUpdate.php";
                    }
                });
            });
        });
    </script>

这是它发送到的简单 php 页面:

$name = $_POST['name'];
echo $name;

我是 jQuery 新手,我不知道为什么这不起作用?

4

4 回答 4

1

当你使用 ajax 时,第二页../php/jobUpdate.php处理第一页发送的数据,并返回一个值(如果你愿意,甚至是一个巨大的 html 字符串)。

第一个页面在 ajax 例程的success函数中接收新数据,然后可以更新当前页面。更新部分发生在success:函数中,所以你在正确的轨道上。

但是在您的成功功能中,您将用户重定向到第二页——在已经在那里并处理数据之后。重定向它们可能不是您想要做的。

尝试替换这个:

                success: function()
                {
                    window.location = "../php/jobUpdate.php";
                }

有了这个:

                success: function(data)
                {
                    alert(data);
                }

如果您想查看如何使用通过 ajax 接收到的数据更新第一页,请尝试在 html 中添加一个空 DIV,如下所示:

<div id="somestuff"></div>

然后,在success:ajax 例程的函数中,执行以下操作:

$('#somestuff').html(data);

(请注意,术语“数据”可以是任何名称,只需与函数参数中使用的名称匹配即可。例如:

success: function(whatzup) {
    alert(whatzup);
}
于 2013-06-17T20:59:07.530 回答
0

在导致窗口重新加载的成功函数上,将删除通过 .ajax 传入的任何变量。

您可以尝试返回数据并在现有页面中使用它。

success: function(msg) {
     $('#someDiv').append(msg);
}
于 2013-06-17T21:06:09.950 回答
0

未定义索引的原因是因为您在数据参数中使用了一个字符串,但是,它实际上是一个类似数组的对象。:)

data: { name: col }

那应该是您需要更改的行。否则我没有看到任何问题。另外,如果我能给你一点想法,我实际上不会使用 POST。事实上,我会使用 GET。我无法确认这是否是保护程序,但使用 $_SERVER["HTTP_REFFERER"] 您可以检查该请求的来源以确定您是否要让它通过。

我建议的方式是,您在 GET 请求中发送 ID,并让 PHP 代码使用json_decode(). 现在在 jQuery 中,您可以使用$.getJSON(url, function(data){})- 一方面,它更短且更快。

由于您可能会在此处自己裁剪 URL,因此请确保使用intVal()JS 中的函数来确保您发送的是整数而不是恶意字符串 :)

于 2013-06-17T21:26:11.950 回答
0

从您对我之前的帖子的评论来看,您似乎根本不需要ajax。您只需要 HTML 中的表单:

<form id="MyForm" action="../php/jobUpdate.php" method="POST">
    <input type="hidden" id="jobID" name="yourJobID">
</form>

请注意,在您将可见的内容放入其中之前,表单是不可见的。

您可以在其中有选择控件(下拉菜单),或者可以使用隐藏的输入字段(如上面的 HTML)使所有表单元素不可见,您可以使用 jQuery 填充这些字段。执行此操作的代码如下所示:

    <script>
    $(document).ready(function() {
        $("table.jobs tbody td#job").click(function() {
            var $this = $(this);
            var col   = $this.text();
            var LeftCellText = $this.prev().text();

            //Set value of hidden field in form. This is how
            //data will be passed to jobUpdate.php, via its `name` param
            $('#jobID').val(LeftCellText); 

            if (col == '')
                alert("Please pick another column");
            else
                $('#myForm').submit();
        });
    });
</script>

如果您向表单添加更多值以发送到 jobUpdate.php,只需确保每个元素都有一个名称,例如<input type="text" name="selectedJobType">(此元素,type="text",将在屏幕上可见)。

在 jobUpdate.php 文件中,您将获得以下值:

$SJT = $_POST['selectedJobType'];
$id = $_POST["yourJobID"];

//Use these vars in MySQL search, then display some HTML based on results

请注意,key$_POST[] 数组中的引用 (selectedJobType / yourJobID) 始终与nameHTML 标记中指定的相同。这些名称区分大小写(并且拼写也很重要)。

希望这不是 TMI,只是希望涵盖所有基础。

于 2013-06-18T17:36:41.800 回答