jQuery $ .ajax post para o arquivo PHP não está funcionando
Então, isso decorre de um problema de ontem que rapidamente saiu do controle, já que os erros eram incomuns. Este problema ainda existe, mas a questão foi colocada em espera,Aqui, e me pediram para reformar uma nova questão que agora se relaciona com o problema atual. Aqui vamos nos.
O problema é básico por natureza. Se você estava ajudando ontem eu mudei de um post $ .post para um $ .ajax post para entregar uma variável para o meuPHP
Arquivo. No entanto meuPHP
arquivo parece nunca receber essa variável informando que o índice é 'indefinido'.
Agora isso normalmente significa que a variável não tem valor, é nomeada incorretamente ou foi enviada incorretamente. Bem, depois de um dia cheio de mexer com isso (me matar) eu ainda não vejo razão minhaPHP
arquivo não deve estar recebendo esses dados. Como sou relativamente novo nisso, estou realmente esperando que alguém consiga identificar um erro óbvio ou recomendo outra possível solução.
Aqui está o código
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';
}
?>
Quando executo este código pressionando '#projects' recebo 2 alertas. Este primeiro alerta diz '6', que é o valor da variável 'ajuda' e é esperado. O segundo alerta está em branco.
Agora aqui é onde eu fico confuso. Se a postagem está sendo enviada com um valor de 6. O conjunto $ _POST ['aid'] não está definido? Além disso, se isso é verdade, não deveria meu código executar oif
parte da minha declaração condicionalem vez do que o meuelse
? De qualquer maneira isso me parece estranho. Eu não deveria receberalguma coisa de volta do meuPHP
Arquivo?
Então, no Firebug nós confiamos, certo? Se eu abrir o Firebug e passar assimFirebug -> POST projects.php -> XHR -> POST(tab) ->
Eu vejo 6 na janela 'Parameter' e '6' na janela 'Source'. Então, se eu clicar nas guias "Response" e "HTML", elas não terão nenhum valor.
Então, de qualquer forma, essa parede de texto é o meu problema. Mais uma vez, estou realmente esperando que alguém possa me ajudar aqui. Eu odiaria perder mais tempo com o que deveria ser uma solução simples.
EDITAR
Se eu mudar o meu arquivo php para ficar assim
<?php
if(isset($_POST['aid'])) {
$aid = $_POST['aid'];
echo $aid;
} else {
echo 'fail';
}
A resposta é agora '6'! Viva! Nós fizemos um grande avanço! Agora, por que não carrega minha tabela que resulta da minha consulta?
nota Isto deveria ser anotado originalmente se eu tirar o
if(isset($_POST['aid'])){
//all my code
} else {
//response
}
e codifique apenas a variável $ aid como esta
$aid = '6';
Em seguida, execute oPHP
arquivo diretamente a consulta é bem sucedida e a página carrega a tabela criando dinamicamente.
Também em resposta a uma das respostas que me pedem para usar
$('#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);
});
});
Eu estava usando isso, mas estou usando o jQuery v1.10.2 e de acordo comisto esses métodos são ou serão descontinuados. De qualquer forma, fez diferença 0 no resultado.
De qualquer forma, a questão é agora. Por que é que se eu usei a versão simples, recebo de volta a minha variável $ aid de '6'. No entanto, quando tento e executar minha consulta com ele eu recebonada. Também por favor, tente lembrar se eu codificar o 6, a tabela cria.