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_table
的pId
会发生什么。有关问题的描述和 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 不会