2011-08-11 12 views
1

私は(おそらく超簡単な)問題を抱えています。以下のコードは、getYourData.phpという外部ファイルに 'id'という変数を_POST(AJAXを使用)しています。変数を外部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 - プライマリページから渡された 'ID' に基づいてカスタム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は、フォーム '= XXX ID' であることが必要です。私はあなたが変数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

それは実際に働いた!しかし、 '2'ではなくid変数を送信する必要があります。データを行う方法はありますか:{id}?それは私のためにエラーをスローする.. – Zakman411

+0

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

+0

また、あなたはすでにidという変数に入れています..その構文はalittle strange探していますが、データ:{'id':id} – Stephen

0

あなたのajax呼び出しのデータが間違っていると思います。 phpはあなたの呼び出しで$ _POST ['id']を参照しますが、var IDは送信されません。

から:http://api.jquery.com/jQuery.ajax/

のDataObject、文字列

データをサーバに送信します。 がまだ文字列でない場合は、クエリ文字列に変換されます。これはGETリクエストのURLに追加されています。この自動処理を防止するには、 processDataオプションを参照してください。オブジェクトは キー/値のペアでなければなりません。値が配列の場合、jQueryは従来の設定 (以下で説明します)の値に基づいて、同じキーを持つ複数の 値をシリアル化します。

データ:

はもっとこのようにする必要があり、 "ID = 2" あなたのAJAX機能で

+0

これはうまくいきますが、member_idが2だけ返されます。ユーザー入力に基づいて変更される 'id'変数はどのように送信できますか? – Zakman411

関連する問題