jQuery $ .ajax发布到PHP文件无法正常工作

所以这源于昨天的一个问题,由于错误是不寻常的,很快就会失控。 这个问题仍然存在,但问题在这里被搁置,我被要求改革一个现在与当前问题有关的新问题。 所以我们走了。

这个问题本质上是基本的。 如果你昨天在帮助我已经从$ .post切换到$ .ajaxpost,将变量传递给我的PHP文件。 但是我的PHP文件似乎永远不会收到这个变量,说明索引是’undefined’。

现在这通常意味着变量没有值,命名不正确或发送不正确。 好了一整天搞乱这个(杀了我)后,我仍然认为没有理由我的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

 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 ""; echo ""; echo ""; //..irrelevant code while ($row = $query_projectInfo->fetch(PDO::FETCH_ASSOC)) { echo ""; echo ""; echo ""; //..irrelevant code echo ""; } echo "
" . "Job #" . "" . "Project Name" . "
" . "" . $row['account_id'] . "" . "" . $row['project_name'] . "
"; } } catch(PDOException $e) { die($e->getMessage()); } } else { echo 'could not load projects table'; } ?>

当我通过按’#projects’运行此代码时,我收到2个警报。 第一个警报显示’6’,这是变量’aid’的值,并且是预期的。 第二个警报是空白的。

现在我在这里感到困惑。 如果发送的post的值为6.是不是设置了$ _POST [‘aid’]? 另外,如果这是真的,我的代码不应该执行条件语句的if部分不是我的else吗? 无论哪种方式,这都让我感到奇怪。 我不应该从我的PHP文件中收到回复的东西吗?

所以在Firebug我们相信,对吗? 如果我打开Firebug并经历这样的事情
Firebug -> POST projects.php -> XHR -> POST(tab) ->
我在’Parameter’窗口中看到6,在’Source’窗口看到’6’。 然后,如果我点击“响应”和“HTML”标签,它们都没有值。

所以无论如何,文本墙是我的问题。 再一次,我真的希望有人可以帮助我。 我不想再把时间浪费在应该是一个简单的解决方案上。

编辑

如果我将我的php文件更改为这样

 <?php if(isset($_POST['aid'])) { $aid = $_POST['aid']; echo $aid; } else { echo 'fail'; } 

现在响应是’6’! 万岁! 我们取得了突破! 现在为什么它不会加载我的查询结果表?

旁注如果我带走了这个,应该最初注意到

 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并根据这些方法已经或将被弃用。 无论哪种方式,它在结果上都有0差异。

无论如何,问题是现在。 为什么如果我使用简单版本,我会回复我的$ 6’的辅助变量。 但是,当我尝试用它运行我的查询时,我什么都没得到。 另外请尝试记住,如果我硬编码6,表创建。

我想这可能是错误:

 data: aid, 

它应该是

 data: {'aid':aid}, 

这将提供你在php页面中寻找的$ _POST [‘aid’]标签和值。

编辑:

如果你遇到这个问题,我会简化它进行测试,这样的事情在我的经验中不起作用的主要原因是:

它没有到达文件

它到达文件但是文件期望与它接收的东西不同,并且由于控制结构它没有返回任何东西

它正在使用正确的数据到达文件,但是php文件中还有其他错误阻止它返回它。

在您的情况下,您可以轻松排除其中的每一个。

ajax方法的jQuery数据参数应该是一个对象,例如{'aid': aid} 。 我认为这是你的问题。 我还注意到你的always方法缺少数据参数。

如果您现在正确发布数据可能问题出在您的PHP页面中? init.php包含无法更改$ _POST [‘aid’]的值可以吗?

我不确定是否会表现得像那样,通常你会这样做:

 $.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. } }); 

如果需要,可以添加故障部分。 无论如何,这是有保证的。 我只是不熟悉做了更多关于它的评论。

尝试

 include "{$_SERVER['DOCUMENT_ROOT']}/TrakFlex/core/init.php"; 

相反导致$ _SERVER [DOCUMENT_ROOT]无支架将无法正常工作。 在字符串中使用数组时,需要这些括号。

由于某些浏览器缓存了ajax请求,因此它不会按预期响应。 因此,明确禁用特定ajax请求的缓存有助于使其工作。 参考下文:

 $.ajax({ type: 'POST', data: {'data': postValue}, cache: false, url: 'postAjaxHandling.php' }).done(function(response){ });