代码之家  ›  专栏  ›  技术社区  ›  Curious13

同一个文件上的多个ajax调用在同一个文件中执行不同的代码?

  •  0
  • Curious13  · 技术社区  · 6 年前

    这是我的代码,我使用引导数据表,服务器端呈现PDO而不是mysqli。第一个ajax调用是查询我的表中的所有记录,第二个ajax调用是关于在表本身中编辑用户记录的功能。然而,我停止了编辑用户记录的功能,因为我想知道如果我能做到这一点是否可能?

    HTML和;JavaScript语言

    <script type="text/javascript">
    $(document).ready(function() {
    
        $('#userDetails').DataTable({
        	"scrollY": "400px",
        	"scrollCollapse": true,
        	"processing": true,
        	"serverSide": true,
        	"ajax": {
        		"url": "../user-actions-script.php",
        		"type": "post",
        	},
       		"deferRender": true,
     		oLanguage: {sProcessing: "<i class='fas fa-spinner fa-3x' id='loader'></i>"},
        });
    
    	$(document).on('click', 'i.fas.fa-edit', function(e){
    		$.ajax({
    			url: '../user-actions-script.php',
    			success: function(){
    				console.log('works');
    			}
    		})
    	});
    
    });
    </script>
    
    <body>
    	<div class="fluid-container">
    		<header>
    			<nav class="navbar navbar-expand-lg navbar-dark bg-dark"></nav>
    		</header>
    		<div class="container">
    			<h2>User Actions</h2>
    
    			<div class="userdetailsContainer">
    				<table class="table table-dark table-striped table-bordered table-hover" id="userDetails">
    					<thead>
    						<!-- adding this in later -->
    					</thead>
    				</table>
    			</div>
    			<!-- Edit Actions Modal -->
    			<!-- Modal -->
    			<div class="modal fade" id="editModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    			  <div class="modal-dialog" role="document">
    			    <div class="modal-content">
    			      <div class="modal-header">
    			        <h5 class="modal-title" id="exampleModalLabel"></h5>
    			        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
    			          <span aria-hidden="true">&times;</span>
    			        </button>
    			      </div>
    			      <div class="modal-body">
    			       	<div class="editHeader">
    			       		<i class="fas fa-edit fa-2x"></i>
    			       		<span>Edit User</span>
    			       	</div>
    			       	<div class="form-group">
    			       		<form
    			       			method="POST"
    							
    			       			>
    				       		<label for="email">Email:</label>
    				       		<input
    				       		 	type="email"
    								class="form-control"
    								name="email"
    				       		>
    							<label for="fullName">Full Name:</label>
    							<input
    								type="text"
    								class="form-control"
    								name="fullName"
    							>
    							<label for="area">area:</label>
    							<select
    								class="form-control"
    								name="area"
    								id="area"
    							>
    								<?php include ("_global/includes/login_select_options-approved.php") ;?>
    							</select>
    							<label for="requestor">Requestor:</label>
    							<select
    								class="form-control"
    								name="requestor"
    								id="requestor"
    							>
    								<?php include ("_global/includes/select_options.php") ;?>
    							</select>
      							</div>
    			       		</form>
    			        	<button
    			        		type="submit"
    			        		class="btn btn-primary">
    			        		Save changes
    			        	</button>
    			       	</div>
    			      </div>
    			    </div>
    			  </div>
    			</div>
    		</div>
    	</div>
    </body>

    PHP PDO/Ajax脚本

    <?php 
    	include "_global/includes/config.php";
    
    	// Set all fetch requests as an object by default
    	$dbo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    
    	// Custom Usergroups Inputs
    	$admin = 'ADMIN';
    	$emptyValues = '';
    	$adminLive = 'ADMIN-live';
    	$adminType = 'ADMIN_US_Type';
    	$customusDomestic = 'US_domestic';
    	$adminChina = 'China_admin';
    	$adminIndia = 'India_admin';
    	$adminCustom = 'ADMIN_custom';
    	$customusaustinCulver = 'US_Austin_Culver';
    	$customuschinaTokyo = 'US_China_Tokyo';
    	$customcorkuaeBayarea = 'Cork_UAE_BayArea';
    	$customchinashanghaiBeijing = 'China_Shanghai_Beijing';
    	$adminselfMoves = 'ADMIN_selfmoves';
    	$adminmilanVienna = 'ADMIN-milan-vienna';
    	$custombayareaSeattle = 'Bayarea_Seattle_admin';
    	$custombayareaCulver = 'ADMIN_Culver_Bay';
    	$customculverSingapore = 'ADMIN_Culver_Singapore';
    	$customcanada = 'ADMIN_canada';
    
    	// Datatable serverside processing script
    	$request = $_REQUEST;
    	$columns = array(
    		0 => 'name',
    		1 => 'email',
    		2 => 'usergroup',
    		3 => 'user',
    		4 => 'DateAdded'
    	);
    
    	// Prepare the query
    	$sqlAll = 'SELECT mem_id, email, name, usergroup, user, DateAdded
    			FROM plus_signuptestdata
    			WHERE usergroup NOT IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
    		 	GROUP BY email
    		 	ORDER BY dateAdded DESC';
    
    	$stmt = $dbo->prepare($sqlAll);
    
    	// Execute the query
    	$stmt->execute([$admin,$emptyValues,$adminLive,$adminType,$customusDomestic,$adminChina,$adminIndia,$adminCustom,$customusaustinCulver,$customuschinaTokyo,$customcorkuaeBayarea,$customchinashanghaiBeijing,$adminselfMoves,$adminmilanVienna,$custombayareaSeattle,$custombayareaCulver,$customculverSingapore,$customcanada]);
    
    	// Count Rows
    	$rowCount = $stmt->rowCount();
    	// Fetch the query
    	$totalData = $stmt->fetchAll(PDO::FETCH_ASSOC);
    	$totalFiltered = $rowCount;
    
    
    	$sqlAll = "SELECT mem_id, email, name, usergroup, user, DateAdded ";
    	$sqlAll .= " FROM plus_signuptestdata ";
    	$sqlAll .= " WHERE usergroup NOT IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    	if(!empty($request['search']['value'])){
    		$sqlAll .= " AND name LIKE '%".$request['search']['value']."%' ";
    
    		$sqlAll .= " OR email LIKE '%".$request['search']['value']."%'";
    
    	}
    	// Order by with empty or without empty user string
    	$sqlAll .=" ORDER BY ". $columns[$request['order'][0]['column']]." ".$request['order'][0]['dir']."  LIMIT ".$request['start']." ,".$request['length']."   ";
    
    	$stmt = $dbo->prepare($sqlAll);
    	// Execute the query
    	$stmt->execute([$admin,$emptyValues,$adminLive,$adminType,$customusDomestic,$adminChina,$adminIndia,$adminCustom,$customusaustinCulver,$customuschinaTokyo,$customcorkuaeBayarea,$customchinashanghaiBeijing,$adminselfMoves,$adminmilanVienna,$custombayareaSeattle,$custombayareaCulver,$customculverSingapore,$customcanada]);
    
    	$totalData = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    
    	$newData = array();
    	// Convert all the data to UTF-8 unicode format.
    	foreach($totalData as $item) {
    		$nestedData=array(); 
    
    		$nestedData[] = mb_convert_encoding($item['name'], 'UTF-8', 'UTF-8');
    		$nestedData[] = mb_convert_encoding($item['email'], 'UTF-8', 'UTF-8');
    		$nestedData[] = mb_convert_encoding($item['usergroup'], 'UTF-8', 'UTF-8');
    		$nestedData[] = mb_convert_encoding($item['user'], 'UTF-8', 'UTF-8');
    		$nestedData[] = mb_convert_encoding($item['DateAdded'], 'UTF-8', 'UTF-8');
    		$nestedData[] = '<i class="fas fa-edit" data-toggle="modal" data-target="#editModal" id="'.$item['mem_id'].'"></i> <i class="fas fa-trash" id="'.$item['mem_id'].'"></i>';
    	
    		$newData[] = $nestedData;
    	}
    
    
    	$json_data = array(
    		"draw"            => intval( $request['draw']), 
    		"recordsTotal"    => intval( $rowCount ),  
    		"recordsFiltered" => intval( $totalFiltered ),
    		"data"            => $newData  
    	);
    
    	echo json_encode($json_data);
      
      // This is fine but what happens when I need to make another ajax call to this file? It'll read all the contents of this script how can I make it to where it reads only certain code within the same file?
    2 回复  |  直到 6 年前
        1
  •  0
  •   Geomorillo    6 年前

    但这难道不是糟糕的建筑吗?不,按你的方式做会很糟糕。在不同的文件中单独操作(delete.php,update.php,create.php)会更好,更易于维护,但是我说的是php部分,是的,你可以在同一个javascript上调用所有这些文件 例如:

    //crud.js
    
    $("#delete_button").on('click', function(e){
            $.ajax({
                url: '../delete.php',
                success: function(){
                    console.log('deleted');
                }
            })
        });
    
    $("#update_button").on('click', function(e){
            $.ajax({
                url: '../update.php',
                success: function(){
                    console.log('updated');
                }
            })
        });
    $("#create_button").on('click', function(e){
            $.ajax({
                url: '../create.php',
                success: function(){
                    console.log('created');
                }
            })
        });
    
        2
  •  1
  •   Funk Forty Niner    6 年前

    您可以使用if块条件来执行特定的ajax调用假设您要从第一个ajax调用执行第一个if块,那么您必须用ajax传递参数,说明您的第一个if块条件对于所有ajax调用都是true和相同的方式。

    PHP代码

     <?php 
         if($_POST['DATA']=='FIRST'){
           all statements are here.
          }else if($_POST['DATA']=='SECOND'){
           all statements of second block is here.
          }else if($_POST['DATA']=='THIRD'){
            all statements of the third block are here.
          }   so on 
      ?>
    

    AJAX调用

      // First AJAX CALL for FIRST IF BLOCK
      $.ajax({
            url: 'please give php file url',
            data:{ DATA: 'FIRST' },
            success: function(){
                console.log('works');
            }
        });
      //  Second AJAX CALL for SECOND IF BLOCK
        $.ajax({
            url: 'please give php file url',
            data:{ DATA: 'SECOND' },
            success: function(){
                console.log('works');
            }
        });
      // so on