2013-07-28 60 views
0

因此,這源於昨天的一個問題,因爲錯誤是非同尋常的,所以它很快就會失控。這個問題依然存在,但問題被擱置,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'; 
} 

?> 

當我按運行該代碼 '#projects' 我得到2個警報。第一次提醒說'6',這是變量'aid'的值,並且是預期的。第二個提醒是空白的。

現在,這裏是我困惑的地方。如果帖子發送的值是6.是不是$ _POST ['aid']設置?此外,如果這是真的不要我的代碼執行我的條件語句if部分比我else?無論哪種方式,這使我感到奇怪。我不應該收到東西回我的PHP文件?

因此,在Firebug我們相信,對吧?如果我打開Firebug並像這樣穿過
Firebug -> POST projects.php -> XHR -> POST(tab) ->
我在「參數」窗口中看到6,在「源」窗口中看到「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 = '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的差異。

無論如何現在的問題。爲什麼如果我使用簡單的版本,我得到echo'd回我的$援助變量'6'。但是,當我嘗試運行我的查詢,我得到沒有。也請儘量記住,如果我硬編碼6,表創建。

+0

我修改了這個問題,使其更清楚目前的問題是什麼 –

回答

1

我想這可能是錯誤:

data: aid, 

應該

data: {'aid':aid}, 

,將提供$ _ POST [「援助」]標籤和值您正在尋找您PHP頁面。

編輯:

如果您遇到這個麻煩,我想它簡化了測試,像這樣的事情在我的經驗不工作的原因主要有:

它沒有達到文件

它到達文件,但該文件的預期的東西比它的不同正在接收和由於控制結構它不返回任何東西

它到達正確的數據文件,但也有其他錯誤,我ñPHP文件,防止它永遠不會返回它。

你可以很容易地排除你的情況下的每一個。

+0

我已更新我的問題,以顯示您建議的更改。結果是直到完全相同 –

+0

我同意。爲了擴展,該帖子需要數據的標籤和值。在引號中包裝援助使它成爲一個標籤,沒有它會傳遞援助的價值。 – joatis

+0

@i_me_mine請參閱編輯 – JohnnyFaldo

1

ajax方法的jQuery數據參數應該是一個對象,如{'aid': aid}。我認爲這是你的問題。我也注意到你的always方法缺少一個數據參數。

+0

我已更新我的問題以顯示您提出的更改結果直到完全相同 –

+0

如果你只是'var_export($ _ POST)'在php腳本中然後'死掉'會發生什麼? –

1

如果您現在正確發佈數據可能會在PHP頁面中出現問題? init.php include不能改變$ _POST ['aid']的值嗎?

+0

這是不太可能的。它包括我的connect_db.php和users.php lds *僅*功能。但是,如果您希望 –

+0

確定重新閱讀您的帖子,您現在表示在修復AJAX呼叫後得到「無響應」,我可以發佈內容。根據你的PHP代碼,不回顯的唯一分支是$ count <= 0。如果你添加一個else,會發生什麼? – joatis

+0

我剛發佈了一個新的編輯。閱讀它,讓我知道如果這仍然適用,並感謝您的幫助 –

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

您可以添加部分失敗如果你想要的話。無論如何,這是保證工作。我只是不夠熟悉,沒有做出更多的評論。

+0

謝謝你的回答。我使用完成,失敗,並完成,但因爲我使用jQuery v1.10.2並根據[this](http://api.jquery.com/jQuery.ajax/),他們已被棄用。儘管我已經嘗試過「成功」,「錯誤」和「完成」,但沒有完成,失敗並完成。結果是一樣的。 –

1

嘗試

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

,而不是導致$ _ SERVER [DOCUMENT_ROOT]不用其他支架將無法正常工作。當你在一個字符串中使用一個數組時,你需要這些括號。

+0

這可能是在某些情況下真實的,我只是想它在我和它拋出一個錯誤說'注意事項:使用未定義的常量DOCUMENT_ROOT的 - 假設「DOCUMENT_ROOT」在C:\ XAMPP \ htdocs中\ TrakFlex \核心\功能\項目。第3行上的php' –

+0

我忘了添加文檔根目錄的'',我編輯了我的代碼。試試吧,它應該工作。 – L105

+0

你在編輯時是正確的,但結果仍然沒有改變。不過謝謝你們在{}括號上的提示。我將確保將來包括他們 –