所以这源于昨天的一个问题,由于错误不正常,很快就会失控。这个问题仍然存在,但问题被搁置,here,我被要求改革一个现在与当前问题有关的新问题。所以我们走了。
问题是基本的。如果你昨天在帮助我已经从$ .post切换到$ .ajax帖子,将变量传递给我的PHP
文件。但是,我的PHP
文件似乎永远不会收到此变量,表明索引未定义'。
现在这通常意味着变量没有值,命名不正确或发送错误。好了一整天搞乱这个(杀了我)后,我仍然认为没有理由我的PHP
文件不应该收到这些数据。由于我对此很陌生,我真的希望有人能发现明显的错误或推荐另一种可能的解决方案。
这是代码
的jQuery
$('#projects').click(function (e) {
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]/TrakFlex/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';
}
?>
当我通过按&#39; #projects&#39;来运行此代码时我得到2个警报。第一个警告说“&#39; 6&#39;”,这是变量&#39;援助的价值。并且是预期的。第二个警报是空白的。
现在我感到很困惑。如果帖子的值为6,那么$ _POST [&#39;援助&#39;]设置?另外,如果真的不应该执行条件语句的if
部分而不是我的else
?。无论哪种方式,这让我感到奇怪。我不能从我的PHP
文件中收到某些吗?
所以在Firebug我们相信,对吗?如果我打开Firebug并像这样经历
Firebug -> POST projects.php -> XHR -> POST(tab) ->
我在&#39;参数&#39;中看到了6。窗口和&#39; 6&#39;在&#39;来源&#39;窗口。然后,如果我点击“响应”&#39;和&#39; HTML&#39;标签他们都没有价值。
无论如何,文本墙是我的问题。再一次,我真的希望有人可以帮助我。我不想再把时间浪费在一个简单的解决方案上。
修改
如果我将我的php文件更改为这样
<?php
if(isset($_POST['aid'])) {
$aid = $_POST['aid'];
echo $aid;
} else {
echo 'fail';
}
现在回复#6;&#39;!万岁!我们取得了突破!现在为什么它不会加载我的查询产生的表格?
旁注 如果我拿走
,这应该是最初注意到的if(isset($_POST['aid'])){
//all my code
} else {
//response
}
只需像这样硬编码变量$ aid
$aid = '6';
然后直接运行PHP
文件,查询成功,页面加载动态创建的表。
同样回应其中一个要求我使用的答案
$('#projects').click(function (e) {
alert(aid);
$.ajax({
url:'core/functions/projects.php',
type: 'post',
data: aid,
success: function(data) {
// this is for testing
}
}).error (function() {
alert('error');
}).complete (function(data) {
alert(data);
$('#home_div').hide();
$('#pcd').fadeIn(1000);
$('#project_table').html(data);
});
});
我正在使用它,但我使用jQuery v1.10.2并根据this这些方法已弃用或将被弃用。无论哪种方式,结果都有0差异。
无论如何,问题是现在。为什么如果我使用简单的版本我得到回应&#39;支持我的$ aid变量&#39; 6&#39;。但是,当我尝试使用它运行查询时,我得到没有。另外请尝试记住,如果我硬编码6,表创建。
答案 0 :(得分:1)
我认为这可能是错误:
data: aid,
应该是
data: {'aid':aid},
这将提供您在php页面中寻找的$ _POST ['aid']标签和值。
编辑:
如果您遇到此问题,我会对其进行简化以进行测试,这样做的主要原因不符合我的经验:
它没有到达文件
它到达文件但是文件期望与它接收的东西不同,并且由于控制结构它没有返回任何东西
它正在使用正确的数据到达文件,但是php文件中还有其他错误阻止它返回它。
在您的案例中,您可以轻松排除其中的每一项。
答案 1 :(得分:1)
ajax方法的jQuery数据参数应该是一个对象,例如{'aid': aid}
。我认为这是你的问题。我还注意到你的always方法缺少数据参数。
答案 2 :(得分:1)
如果您现在正确发布数据可能问题出在您的PHP页面中? init.php包含无法更改$ _POST ['aid']的值吗?
答案 3 :(得分:1)
我不确定是否会表现得像那样,通常你会这样做:
$.ajax({
//...
})
.done(function(data){
//...
});
就这样做:
var fetch = true;
var url = 'someurl.php';
$.ajax(
{
// Post the variable fetch to url.
type : 'post',
url : url,
dataType : 'json', // expected returned data format.
data :
{
'aid' : aid
},
success : function(data)
{
// This happens AFTER the backend has returned an JSON array (or other object type)
var res1, res2;
for(var i = 0; i < data.length; i++)
{
// Parse through the JSON array which was returned.
// A proper error handling should be added here (check if
// everything went successful or not)
res1 = data[i].res1;
res2 = data[i].res2;
// Do something with the returned data
}
},
complete : function(data)
{
// do something, not critical.
}
});
如果需要,您可以添加失败部分。无论如何,这是有保证的。我只是不熟悉做了更多关于它的评论。
答案 4 :(得分:1)
尝试
include "{$_SERVER['DOCUMENT_ROOT']}/TrakFlex/core/init.php";
导致$ _SERVER [DOCUMENT_ROOT]无法支架无法正常工作。在字符串中使用数组时,需要这些括号。
答案 5 :(得分:0)
由于某些浏览器会缓存ajax请求,因此它不会按预期响应。因此明确禁用缓存特定的ajax请求有助于使其工作。请参阅以下内容:
$.ajax({
type: 'POST',
data: {'data': postValue},
cache: false,
url: 'postAjaxHandling.php'
}).done(function(response){
});