PHP文件接收带有奇怪行为的jQuery AJAX帖子
因此,这源于昨天的一个问题,这个问题很快就失去了控制,因为错误是不寻常的。这个问题仍然存在,但是这个问题被搁置了,我被要求修改一个新的问题,这个问题现在与当前的问题有关。然后我问了一个问题,事情很快就偏离了主题。我决定接受解决最初问题的答案,继续前进。我现在认为,我们已经把问题缩小到一个非常具体的问题 这个问题现在对我来说毫无意义。我有以下代码 jQueryPHP文件接收带有奇怪行为的jQuery AJAX帖子,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,因此,这源于昨天的一个问题,这个问题很快就失去了控制,因为错误是不寻常的。这个问题仍然存在,但是这个问题被搁置了,我被要求修改一个新的问题,这个问题现在与当前的问题有关。然后我问了一个问题,事情很快就偏离了主题。我决定接受解决最初问题的答案,继续前进。我现在认为,我们已经把问题缩小到一个非常具体的问题 这个问题现在对我来说毫无意义。我有以下代码 jQuery $('#projects').click(function (e) { $.trim(aid); alert(aid); $.ajax(
$('#projects').click(function (e) {
$.trim(aid);
alert(aid);
$.ajax({
url:'core/functions/projects.php',
type: 'post',
data: {'aid' : aid},
done: function(data) {
// this is for testing
}
}).fail (function() {
alert('error');
}).always(function(data) {
alert(data);
$('#home_div').hide();
$('#pcd').fadeIn(1000);
$('#project_table').html(data);
});
});
PHP
<?php
include "$_SERVER[DOCUMENT_ROOT]/core/init.php";
if(isset($_POST['aid'])) {
$aid = $_POST['aid'];
try {
$query_projectInfo = $db->prepare("
SELECT projects.account_id,
projects.project_name,
projects.pm,
//..irrelevant code
FROM projects
WHERE account_id = ?
");
$query_projectInfo->bindValue(1, $aid, PDO::PARAM_STR);
$query_projectInfo->execute();
$count = $query_projectInfo->rowCount();
if ($count > 0) {
echo "<table class='contentTable'>";
echo "<th class='content_th'>" . "Job #" . "</th>";
echo "<th class='content_th'>" . "Project Name" . "</th>";
//..irrelevant code
while ($row = $query_projectInfo->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>";
echo "<td class='content_td'>" . "<a href='#'>" . $row['account_id'] . "</a>" . "</td>";
echo "<td class='content_td'>" . $row['project_name'] . "</td>";
//..irrelevant code
echo "</tr>";
}
echo "</table>";
}
} catch(PDOException $e) {
die($e->getMessage());
}
} else {
echo 'could not load projects table';
}
?>
现在的回答是“6”!这意味着该文件正在接收我的$\u POST['aid']变量,并在PHP
中正确设置它。现在,如果我把代码改回去,我同样什么也得不到
但是,如果我将原始的PHP
文件更改为
<?php
include "$_SERVER[DOCUMENT_ROOT]/core/init.php";
$aid = '6';
try {
$query_projectInfo = $db->prepare("
SELECT projects.account_id,
projects.project_name,
projects.pm,
//..irrelevant code
FROM projects
WHERE account_id = ?
");
$query_projectInfo->bindValue(1, $aid, PDO::PARAM_STR);
$query_projectInfo->execute();
$count = $query_projectInfo->rowCount();
if ($count > 0) {
echo "<table class='contentTable'>";
echo "<th class='content_th'>" . "Job #" . "</th>";
echo "<th class='content_th'>" . "Project Name" . "</th>";
//..irrelevant code
while ($row = $query_projectInfo->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>";
echo "<td class='content_td'>" . "<a href='#'>" . $row['account_id'] . "</a>" . "</td>";
echo "<td class='content_td'>" . $row['project_name'] . "</td>";
//..irrelevant code
echo "</tr>";
}
echo "</table>";
}
} catch(PDOException $e) {
die($e->getMessage());
}
?>
现在,我在浏览器中得到的响应是
6<table class='contentTable'><th class='content_th'>Job #</th><th class='content_th'>Project Name</th><th class='content_th'>PM</th><th class='content_th'>APM</th><th class='content_th'>Est. Start</th><th class='content_th'>Est. End</th><th class='content_th'>Contact</th><th class='content_th'>Trips</th><th class='content_th'>Tasks</th><th class='content_th'>% Complete</th><th class='content_th'>BCWP</th><th class='content_th'>Actuals</th><th class='content_th'>CPI</th><th class='content_th'>BCWS</th><th class='content_th'>BAC</th><th class='content_th'>Comments</th><th class='content_th'>Status</th><th class='content_th'>Project Revenue</th><th class='content_th'>Profit Margin</th><th class='content_th'>PM%</th><th class='content_th'>Audited</th></table>
哪个应该是断线,对吗?我认为这就是造成错误的原因
这就是我获得援助的方式
var title;
var aid;
$(".sa").click(function (e) {
title = $(this).text();
$.post('core/functions/getAccountId.php', {
title: title
})
.done(function(data) {
aid = data;
$("#acc_title").html(title);
$('#accountsSelectDiv').hide();
$('#acc_home').fadeIn(1000);
$('#home_div').show();
})
.fail(function(jqXHR, status, error) {
alert(error);
});
});
这可能是因为我如何得到它,我不知道。如何删除源代码中的额外字符?这就是我认为的问题所在这可能不起作用,但请尝试改变:
type: 'post',
到
如果它区分大小写,那么它将无法识别它并默认为$\u GET,这将解释为什么查找$\u POST['aid']不起作用。*编辑* 虽然这是公认的答案,但它是完全错误的,从某种意义上说,它与真正的解决方案无关。这是从这里和问题的注释中得出的,最后是字符串中的CR/NL(“\r\n”)组合,该字符串来自从另一个PHP文件读取的JS文件。。。你明白了。“如果发生奇怪的事情,检查隐藏的字符!”
我现在没有时间,星期天晚上10点上班!但是 这是你的问题,如果我理解的话: 定义数据时:{'aid':aid}aid尚未定义 不要被
$('#projects')这一事实所迷惑。单击(函数(e){
alert(aid);
在前面,在它上面。单击时会调用它,因此在很可能定义了aid之后执行它。而{'aid':aid}在解析代码时接受aid的值,因此如果没有在它上面定义aid,它将是未定义的
如果您在之前输入了一个aid=“hello”
,在单击脚本中,您将看到它工作,或者至少它将显示“hello”
您必须小心使用JQuery、Ajax和回调。请准确地考虑所有内容的执行时间,不要依赖于“在顶部编写=首先执行”
希望这是你的问题,你可以解决它,晚安:)
还有一件事..一个解决方案是在click处理程序中准备Ajax内容
$(“.”)。单击(){
//在这里准备东西
//{'aid':aid}这里定义了aid
}我想知道(jQuery submitted)AID值是否包含硬编码AID没有的空格或类似空格。这肯定会影响WHERE子句。@这与FrancescoMM最近的回答混合在一起完全有意义。我编辑了我的问题以添加$.trim()这应该可以解决这个问题,对吗?因为更新
$query\u projectInfo->bindValue(1,$aid,PDO::PARAM\u STR);
到$query\u projectInfo->bindValue(1,$aid,PDO::PARAM\u INT);
是否有任何效果?如果“6”是由js从文件(包括PHP脚本)加载的,请确保它没有与BOM一起保存为UTF-8,否则会在它之前添加一个不可见的字符。我也有它们,我理解。我想说你是正确的,但在FireFox的Firebug中,当我查看POST方法时,它仍然保持值6,这应该是在它被正确发送之后的值?也是我的ph的简化版本p
,将无法获取此变量,它会这样做,然后返回它。aid在包含在此文件之前的另一个.js文件中定义。aid变量有值。如果我将echo$aid;添加到我的php文件中,我会得到它back@i_me_mine好的,所以可能是其他原因,您可以编写一个硬编码的{'aid':6}所以你确定你排除了js/setting aid中的任何错误或奇怪的字符,比如值中的零或BOM?试着从PHP中清除它看看我的评论。如果它起作用,你可以开始查找原因。你可能会在js中搜索生成6个valuearg的错误,在这个愚蠢的问题上浪费了这么多时间,一个我觉得这是一个愚蠢的理由。好吧,我刚看到评论,我会试试看,谢谢
aid=%0D%0A6
var title;
var aid;
$(".sa").click(function (e) {
title = $(this).text();
$.post('core/functions/getAccountId.php', {
title: title
})
.done(function(data) {
aid = data;
$("#acc_title").html(title);
$('#accountsSelectDiv').hide();
$('#acc_home').fadeIn(1000);
$('#home_div').show();
})
.fail(function(jqXHR, status, error) {
alert(error);
});
});
type: 'post',
type:'POST',