2011-08-11 66 views
1

我有一個(可能是超級簡單的)問題。下面的代碼應該是_POST(使用AJAX)一個名爲'id'的變量到名爲getYourData.php的外部文件。將變量傳遞給外部PHP文件

我認爲這個問題在下面。 'data'部分似乎不起作用 - 我甚至試着把[data:'2']簡單地放在SELECT語句中'2'。但這甚至不起作用。

$.ajax({ 
     type: 'POST', 
     url: 'getYourData.php', 
     data: 'id', 
     success: function(msg){ 
      //everything echoed in your PHP-File will be in the 'msg' variable: 
      $('#selectTwo').html(msg) 
      $('#selectTwo').fadeIn(500); 
     } 
}); 

這裏的代碼的其餘部分(片段 - jQuery的已導入)

<!-- First Box: click on link shows up second box --> 
<div id="selectOne" style="float: left; margin-right: 10px; border: #666 thin solid; padding: 10px;"> 
    <a href="#" id="1">One</a><br /> 
    <a href="#" id="2">Two</a><br /> 
    <a href="#" id="3">Three</a> 
</div> 

<!-- Second Box: initially hidden with CSS "display: none;" --> 
<div id="selectTwo" style="float: left; margin-right: 10px; display: none; border: #666 thin solid; padding: 10px;"></div> 

<!-- The JavaScript (jQuery) --> 
<script type="text/javascript"> 

//Do something when the DOM is ready: 
$(document).ready(function() { 

//When a link in div with id "selectOne" is clicked, do something: 
$('#selectOne a').click(function() { 
    //Fade in second box: 
    $('#selectTwo').fadeIn(500); 

    //Get id from clicked link: 
    var id = $(this).attr('id'); 

    $.ajax({ 
     type: 'POST', 
     url: 'getYourData.php', 
     data: '2', 
     success: function(msg){ 
      //everything echoed in your PHP-File will be in the 'msg' variable: 
      $('#selectTwo').html(msg) 
      $('#selectTwo').fadeIn(500); 
     } 
}); 

    //Depending on the id of the link, do something: 
    if (id == 'one') { 
     //Insert html into the second box which was faded in before: 
     $('#selectTwo').html('One<br />is<br />selected') 
    } else if (id == 'two') { 
     $('#selectTwo').html('Two<br />is<br />selected') 
    } else if (id == 'three') { 
     $('#selectTwo').html('Three<br />is<br />selected') 
    } 

    }); 


}); 
</script> 

getYourData.php - 創建一個基於從主頁面傳遞的 '身份證' 的自定義SELECT語句。出於某種原因,這是行不通的。只能當我故意設置一個啞炮變量($ ID2)

<?php 


$username="primary"; 
$password="testpass"; 
$database="testdb"; 

mysql_connect(localhost,$username,$password) or die ('Unable to connect...'); 

mysql_select_db($database) or die('Error: '.mysql_error()); 

//Intentionally creating a dud variable will create a good SELECT statement and work 
$id2 = "3"; 

$id = $_POST['id']; 
$query = mysql_query('SELECT * FROM members WHERE member_id='.$id); 
$result = mysql_fetch_assoc($query); 

//Now echo the results - they will be in the callback variable: 
echo $result['firstname'].', '.$result['lastname']; 

mysql_close(); 
?> 
+1

您的AJAX函數中的'data'必須是'id = xxx'的形式。這是一個錯字嗎? –

+0

@Andrew:但它是一個變量......它根據用戶點擊的id(鏈接)而變化。 xxx會是什麼? – Zakman411

+0

@ Zakman441:我看到你在變量'id'中有它。試試''id ='+ id'。混淆我知道大聲笑 –

回答

0

data在你的AJAX功能需要這樣的形式 'ID = XXX' 的。我看到你在變量ID中有它。試試data: 'id=' + id。混淆我知道。

這裏的解釋是POST數據應該是a=b,c=d,...等等的形式。這樣PHP就會將它作爲$ _POST字典中的鍵/值對進行提取。現在你有一個變量id你想發送(價值),你也希望這是(密鑰)的名稱。因此你需要做data: 'id=' + id。如果id=2,那麼將評估爲data: 'id=2',這是正確的。

最終,正如@Stephen指出的那樣,最好使用Object作爲數據字段,因爲它可以說更加優雅。 data: {'id': id}也應該可以工作,並且您可以在將來添加更多變量。

+0

但是如果他以後需要添加更多的數據,他會不斷地有這個混亂的字符串來處理..你使用對象更好.. – Stephen

+0

我完全同意你@Stephen,我已經編輯過我的答案反映了這一點。 –

0

你試過數據:{ID:2} - 對象,而不是一個數組。

+0

這實際上工作!但是,我需要傳輸id變量,而不是'2'。有沒有辦法只是做數據:{id}?這對我來說是一個錯誤.. – Zakman411

+0

data:{'id':$(this).attr('id')} – Stephen

+0

此外,你已經把它放在一個名爲id的變量..所以語法是小怪但數據:{'id':id} – Stephen

0

我相信你的ajax調用中的數據是錯誤的。 php在你的調用中引用$ _POST ['id'],但不會發送var ID。

從:http://api.jquery.com/jQuery.ajax/

dataObject時,字符串

數據要被髮送到服務器。如果 不是字符串,它將被轉換爲查詢字符串。它附加到GET請求的url。請參閱 processData選項以防止此自動處理。對象必須是 是鍵/值對。如果value是一個數組,則jQuery將基於傳統設置 (如下所述)的值使用相同密鑰對多個 值進行序列化。

應該更像這樣:

數據: 「ID = 2」,

+0

這是行得通的,但只返回2的member_id。我怎樣才能發送基於用戶輸入而改變的'id'變量? – Zakman411