jQuery AJAX Post 不工作

Posted

技术标签:

【中文标题】jQuery AJAX Post 不工作【英文标题】:jQuery AJAX Post not working 【发布时间】: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) 之类的东西。 并回答您评论中的问题:是的,用户可以在将隐藏值发送到您的服务器之前更改它们。基本上,来自用户的所有内容都应被视为潜在的恶意数据。我们生活在一个丑陋的世界...... 【参考方案1】:

在这一行:

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

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

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

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

【讨论】:

谢谢。这修复了一个错误,但该脚本仍然无法正常工作。 谢谢。找出除了丢失的“$”之外的问题...另一个问题是“$.post('/project_ajax.php', " 处的'/'

以上是关于jQuery AJAX Post 不工作的主要内容,如果未能解决你的问题,请参考以下文章

jQuery .ajax() POST 请求抛出 405(不允许的方法)但 GET 不会

jQuery/AJAX post() - 一些问题

Asp.Net+JQuery.Ajax之$.post

JQuery ajax 调用 httpget webmethod (c#) 不工作

Jquery Ajax post方法给出空值

jQuery Ajax Post - 无法使用回调函数设置全局变量?