【问题标题】:jQuery AJAX Post not workingjQuery AJAX Post 不工作
【发布时间】:2010-12-23 20:14:31
【问题描述】:

我不明白为什么这个脚本不起作用。它与 AJAX POST 脚本/函数中的某些内容有关。现在,当我在表单上点击提交时,它会在同一页面上运行 php 代码。它应该做的是将表单的值发送到 project_ajax.php,然后在页面将返回一个成功的 var,它是 true 或 false。

$(document).ready(function () {
    $('div#didIt').hide();
    $('form[name=adminForm]').submit(function () {
        $.post('/project_ajax.php', {
            action: $('[name=action]').val(),
            pId: $('[name=pId]').val(),
            name: $('[name=name]').val(),
            url: $('[url=url]').val(),
            summary: ('[summary=summary]').val()
        }, function (data) {
            if (data.success) {
                $('div#didIt').slideDown('slow');
            } else {
                alert('Failed SA!');
            }
        }, 'json');
        return false;
    });
});

下面是 project_ajax.php 的代码...

if($_POST['action'] == "update") {
    //Prep the field for Query Entry!-----------------------------------
    $pId     = $_POST['pId'];
    $name    = trim(mysql_prep($_POST['name']));
    $status  = 1;
    $url     = trim(mysql_prep($_POST['url']));
    $tumb    = false; //False because I still need to make a script for it.
    $summary = trim(mysql_prep($_POST['summary']));
    $creater = $_SESSION['userId'];
    $created = date("Ymd");

    $q = "UPDATE " . DB_NAME . ".`projects` SET 
                    name    = '{$name}',
                    status  = '{$status}',
                    url     = '{$url}',
                    summary = '{$summary}',
                    creater = '{$creater}',
                    created = '{$created}'
              WHERE `projects`.`id` = {$pId}";
    $r = mysql_query($q, $connection);
    if ($r) {
        //Successful
        $data['success'] = true;
        $date['error']   = false;
        $date['message'] = "You are the Greatest!";

    } else {
        //Fail
        $data['success'] = false;
        $data['error']   = true;
        $date['message'] = "You can't do it fool!";

    }

} else {
    $data['success'] = false;
    $date['error']   = true;
    $data['message'] = "You Failed Stupid!";
}

echo json_encode($data);

注意:加载此页面时。浏览器永远不会真正完成加载。 IE8 中标题选项卡上的蓝环旋转,好像页面永远不会完成加载。

【问题讨论】:

  • 你在其他浏览器中测试过吗?可能是它只在 IE8 中失败。还要检查是否有任何导致代码失败的 JavaScript 错误(例如语法错误或未定义的内容等)。检查 jQuery 选择器是否选择了正确的表单。
  • 您的 PHP 代码看起来很容易受到 SQL 注入攻击。猜猜如果用户发送一个带有值123; DROP TABLE some_tablepId 会发生什么。有关问题的描述和 PHP 的几种解决方案,请参阅en.wikipedia.org/wiki/SQL_injection
  • 好吧,我相信我的代码很容易发生 SQL 注入。但是我不相信“pId”是一个。只是因为 pId 是从数据库中提取的隐藏值。除非用户可以更改隐藏值?他们可以更改隐藏的值吗?
  • 您将一个值从$_POST 分配给$pId,而无需对其进行转义或类型转换。如果projects.id 是一个整数,您可以将它转换为一个int ($pId = (int) $_POST['pId'];)。但$pId 并不是唯一的问题,所以我的建议是远离mysql_* 函数并使用支持准备好的语句的PDO (php.net/manual/en/book.pdo.php) 之类的东西。
  • 并回答您评论中的问题:是的,用户可以在将隐藏值发送到您的服务器之前更改它们。基本上,来自用户的所有内容都应被视为潜在的恶意数据。我们生活在一个丑陋的世界......

标签: php jquery mysql ajax post


【解决方案1】:

在这一行:

  summary: ('[summary=summary]').val()},

您缺少代表 jQuery 函数的 $。更正:

summary: $('[summary=summary]').val()},

因为你有一个 Javascript 错误,执行被终止。因此加载需要很长时间。

【讨论】:

  • 谢谢。这修复了一个错误,但该脚本仍然无法正常工作。
  • 谢谢。找出除了丢失的“$”之外的问题...另一个问题是“$.post('/project_ajax.php', {" 处的'/'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 2013-08-02
  • 2015-06-03
相关资源
最近更新 更多