2016-10-03 245 views
6

enter image description hereJobIdを送信し、ビューに値を追加する方法を教えてください。アヤックス

これは、データ・ベース・r_jobテーブルからフェッチlotalリスト..です 私はビューの[詳細]ボタンをクリックすると、それはAJAXを通じてページをコントローラにジョブ値を取るために、そこに私は、ジョブ情報を取得します持っているとそれに応じて、私は仕事関連のテーブルを送ってこのページに表示しなければなりません。

これは私の動的なリストである:

$Jobquery = $conn->query("SELECT * FROM r_job "); 
while($JobResults = $Jobquery->fetch_assoc()){ 

<tr> 
    <td id="hiringevent"><?php echo $JobResults['hiringevent']; ?></td> 
    <td id="JobId"><?php echo $JobResults['id_job']; ?></td> 
    <td><button id="ViewDetails" class="btn btn-primary text-center">View Details</button></td> 
</tr> 

そして、これは私のAJAXとjQueryのコールです:

$("#ViewDetails").click(function() { 
    $.ajax({ 
      url: "job-controller.php", 
      method: "POST", 
      data: {'action':'viewjob','JobId' : + $('#JobId').html()}, 
      dataType: "json", 
      success: function (response) { 
       $("#showMessage").html(response['message']); 
      }, 
      error: function (request, status, error) { 
       $("#showMessage").html("OOPS! Something Went Wrong Please Try After Sometime!"); 
      } 
     }); 
     return false; 
    }); 

最後に私のコントローラのページ:

if($_POST['action']=='viewjob'){ 
     $jobSearch= $conn->query("SELECT * From r_job WHERE id_job='".$_POST['JobId']."'") or die(mysql_error()); 
     $ViewJob=$jobSearch->fetch_assoc(); 
     $hiringevent  = $ViewJob['hiringevent']; 
     $jobname   = $ViewJob['jobname']; 
     $jobdescription  = $ViewJob['jobdescription']; 
     $cutoff    = $ViewJob['cutoff']; 
     $joblocation  = $ViewJob['joblocation']; 
     $interviewlocation = $ViewJob['interviewlocation']; 
     $jobexperience  = $ViewJob['jobexperience']; 
      $response['message'] = "Show Job Information"; 
      $response['success'] = true; 
      }else{ 
      $response['message'] = "OOPS! Something Went Wrong Please Try After Sometime!"; 
      $response['success'] = false; 
     } 
     echo json_encode($response); 
     exit; 
    } 

私の現在の問題表示詳細をクリックすると、最初の表示の詳細のみが表示されます。 ボタンがまだ応答していません。

答えて

2

ページあたり1つのIDが必要です。 ボタンをクリックするとjs関数を作成して呼び出し、JobIdをパラメータとして送信するだけです。あなたがループにいるときにうまく動作します。

HTML

$Jobquery = $conn->query("SELECT * FROM r_job "); 
while($JobResults = $Jobquery->fetch_assoc()){ 

<tr> 
    <td id="hiringevent"><?php echo $JobResults['hiringevent']; ?></td> 
    <td id="JobId"><?php echo $JobResults['id_job']; ?></td> 
    <td><button class="btn btn-primary text-center" onClick="getDetails(<?php echo $JobResults['id_job']; ?>)">View Details</button></td> 
</tr> 
} 

JS

function getDetails(jobID){ 
// ajax Call Here 
console.log(jobID)// you can see JobID Here. 
// now set the values to by using id 
$("#ViewJobId").val(response['jobData']['jobId']); 
/* val is used to set aswell as get the values */ 



    /*in case of td you have to use text insted of val*/ 
    $("#ViewJobId").text(response['jobData']['jobId']); 

} 
1

コードにビューの問題があります。

1. IDSは

HTML-IDは一意であり、唯一のページ一度使用することができますHTMLページで1回しか使用できません。それがあなたの最初の設計エラーです。PHPループ内でhtmlを生成する場合は、idsの代わりにクラスを使用する必要があります。

2. AJAXによって送られたIDを使用すると、$('#JobId').html()は独立して最初#JobIdのHTMLを返しているので、あなたが現在常にあなたのコントローラに同じIDを送信している

をクリックした場所に依存する必要があります。ユーザーがどのボタンをクリックしてID間を区別できるかを調べる必要があります。

1.ステップ - 複数回レンダリングされるすべての要素について、idをhtmlのクラスで置き換えます。実際によってクリックされたボタンを見つける: - あなたのAJAX要求で

<tr> 
    <td class="hiringevent"><?php echo $JobResults['hiringevent']; ?></td> 
    <td class="JobId"><?php echo $JobResults['id_job']; ?></td> 
    <td><button class="ViewDetails" class="btn btn-primary text-center" data-id="<?php echo $JobResults['id_job']; ?>">View Details</button></td> 
</tr> 

2.ステップ:私はまた、あなたのボタンにdata-id属性、それがクリックされたボタンを見つけることは非常に簡単です。この方法を追加しましたユーザー - 私はここで、データ属性を使用しています:

// ... 
data: {'action':'viewjob','JobId' : $(this).data('id')}, 
// ... 

説明:jqueryの中$(this)は常にイベントをトリガし、現在の要素を参照しています。あなたのケースではボタンによってトリガされたクリックイベントです - $(this).data('id')はボタンのHTMLコードのデータ属性 "id"を読み込んでいます。

関連する問題