【问题标题】:How to process data in PHP that was serialized and sent from jQuery?如何处理从 jQuery 序列化和发送的 PHP 数据?
【发布时间】:2011-08-26 00:52:57
【问题描述】:

我正在努力获得 $.ajax 调用以正确地将一些表单数据发送到 PHP(它被记录到数据库然后显示)。我很难过,因为我之前有 $.ajax 来完成类似的任务,而且效果很好,但我必须在这里遗漏一些关键的东西。我研究了其他答案(例如this one),但在那里找不到任何表明我当前的代码不起作用的东西。任何见解将不胜感激!

表格如下所示:

            <div id="note_add_container">
                <form id="note_add" method="POST">
                    <input type="text" name="title" placeholder="title" />
                    <input type="text" name="summary" placeholder="summary" />
                    <input type="text" name="details" placeholder="details" />
                    <button id="submit_note">Add note!</button>
                </form>
            </div>

            <div id="entries">
                <!-- AJAX call will populate entries here -->
            </div> 

这里是 jQuery:

    $('#submit_note').click(function () {
        var text = $.ajax ({
            type: "POST",
            url: "note_process.php",
            data: $('#note_add').serialize(), 
            dataType: "json",
            async: false,
        }).responseText;
        $('#entries').html(text); 
    })

这里是 PHP note_process.php:

include_once "connect.php";
session_start();

$id = $_SESSION['userid'];
$title = $_POST['title'];
$summary = $_POST['summary'];
$details = $_POST['details'];

$query = mysql_query("INSERT INTO notes (id, title, summary, details) VALUES ('$id', '$title','$summary','$details')");

echo $title . $summary . $details;

【问题讨论】:

  • 您能解释一下什么不起作用吗?
  • 是的,很抱歉不清楚这一点。不起作用的部分是应该从 PHP 中回显的行没有按预期填充在 DIV“条目”中。
  • 我猜帖子变量是序列化的。您需要先对其进行 json_decode。
  • 使用firebug,检查控制台看数据是否正确发布,如果有,请检查响应。
  • mixdev - 抱歉,我是新手,但如果我使用 json_decode($somedata) 解码,如何将表单中的数据传递到 $somedata?

标签: php jquery ajax post


【解决方案1】:

尝试使用“成功”,而不是使 Ajax 请求非异步...

   $('#submit_note').click(function () {
        $.ajax ({
            type: "POST",
            url: "note_process.php",
            data: $('#note_add').serialize(), 
            success: function(text){
                  $('#entries').html(text); 
            }
        });    
    });

【讨论】:

  • 这段代码似乎是对的,你是从服务器收到东西吗?
  • 我认为我没有从服务器得到任何东西,即使我只是在 PHP 中放了一个 echo 'hello world' 行,我也没有得到它
  • 乔丹 - 谢谢!我只是再次尝试了这段代码,并意识到在您进行编辑之前我已经复制了它,这就是它不起作用的原因。感谢大家的帮助。我很感激。
  • 同步应该仍然可以工作......绝对没有理由异步工作和同步不会......
【解决方案2】:

如果仍然无法正常工作,我会担心您的网址是否准确...
尝试使用 PHP 文件的绝对路径...例如“/note_process.php”(或文件相对于站点根目录的位置)

【讨论】:

    【解决方案3】:

    这是一个猜测:

    1. 您已关闭错误报告(在开发阶段出现错误)
    2. title 列是 required 在您的 notes 表中,
    3. (这是事实)您在$title = $_POST['type']; 中使用了错误的post 参数

    所以:

    1. $title = $_POST['type']; 应该会生成警告,但不会,
    2. $title 将为空白,并且您的查询无法插入记录,并且您收到一个致命错误,但看不到它。

    【讨论】:

    • 感谢您捕获 3 - 这绝对是真的。我解决了这个问题,但仍然遇到问题。我发现如果我使用此代码(如下),我可以从服务器获取 echo 'hello world' 但我仍然无法从表单中回显任何内容。 $('#submit_note').click(function (){ $('#entries').append( $('
      ').load('note_process.php', $('#note_add').serialize () )); 返回 false; })
    • 我建议你构造查询并将它分配给一个字符串:$query = "INSERT INTO notes ...";,然后是die($query),然后在 firbug 中捕获它并在 PHPMyAdmin 中测试它,看看你得到了什么。
    【解决方案4】:

    我在jsFiddle 上的发现:&lt;button&gt; 似乎正在提交表单!?天知道为什么!?解决方案相当简单 =) 不要使用&lt;button&gt;

    把BUTTON标签换成A标签就可以了。

    Jordan Rynard 说得好:您确定您的网址有效且正确?

    【讨论】:

    • 嗯。我更换了按钮,仍然没有运气。我已经验证了 URL 是有效的(请参阅上面答案的评论),因为我让服务器返回一个硬编码的回显,但是对于我尝试检索的所有表单数据,我仍然收到这个“未定义的索引”错误使用 $_POST
    • 这是您的 MySQL 数据库的错误...(未定义索引)
    • 我认为这是一个错误,因为它找不到 $_POST['title']、$_POST['summary'] 和 $_POST['details']。该错误引用了这 3 行,即使我注释掉 mysql 查询,我仍然可以得到它。
    • 不是数据库错误。 “未定义的索引”正是 john k 所说的:php 数组中的“缺失”元素。 edit 所以看起来数据没有正确发送和/或接收......
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签