ajax url 指向单独文件中的 php 函数

ajax url point to a php function in seperatet file

我在使用 ajax 时遇到了一些问题(从未使用过)。 我想从表格中删除选定的行而不刷新页面,并且不为查询创建新文件。如果可能,我想保留 functions.php 中的所有功能吗?

我这里有 3 个文件。

索引文件:

$res = articles($db);
   foreach($res as $res){
      $id = $res['article_id'];

    echo "<form action='' method='post'>";
      echo "<input type=hidden" name='delete' value="<?php echo $id;?>">
      echo "<input type='submit' name='delete_article'>";
    echo "</form>";
      }

ajax 通话

$.ajax({ url: 'HERE I WANT TO RUN THE DELETE FUNCTION FROM FUNCTIONS.PHP',
     data: {action: 'test'},
     type: 'post',
     success: function(output) {
                  alert(output);
              }
});

函数

function delete_article($db){

$id = $_POST['delete'];
$sql = "DELETE FROM articles WHERE article_id = :article_id";
$stmt = $db->prepare($sql);
$stmt->bindValue(':article_id',$id);
$stmt->execute();
}
$.ajax({ url: 'FUNCTIONS.PHP',
     data: {action: 'delete', delete: '123'},
     type: 'post',
     success: function(output) {alert(output);}
});

在function.php

if(isset($_POST['action'] && $_POST['action'] == 'delete')
    delete_article($db);

首先,您的代码中有不少错别字。因此,如果有任何问题 运行,您将需要修复它们。牢记这一点,这里是对您的代码的简短修订,应该可以正常工作。 (我还没有测试过)。

我建议使用带有 GUI 的编辑器,帮助您识别 HTML 和 PHP 编码问题。

您的索引文件:

<?
$res = articles($db);
foreach ($res as $res) {
    $id = $res['article_id'];

    echo "<form action='' method='post'>";
    echo "<input type=hidden name='delete' id='article_id' value = '$id' >";
    echo "<input type='button' name='delete_article' onclick='delete_article(\"$id\")'>";
    echo "</form>";
}
?>

你的Javascript:

<script>
    function delete_article(articleId) {
        $.ajax({
            url: 'function.php',
            data: {
                action: 'test',
                article: articleId
            },
            type: 'post',
            success: function (output) {
                alert(output);
            }
        });
    }
</script>

你的function.php

<?php
$action = (isset($_POST['action'])) ? $_POST['action'] : false;
switch (strtolower($action)) {
    case "test":
        /* create your $db connection */
        delete_article($db);
        break;
    default:
        break;
}
echo "OK";
exit;

function delete_article($db){

    $id = $_POST['delete'];
    $sql = "DELETE FROM articles WHERE article_id = :article_id";
    $stmt = $db->prepare($sql);
    $stmt->bindValue(':article_id',$id);
    $stmt->execute();
}
?>

正确解:

  • 构建一些您可以从浏览器调用的操作,例如 yuorurl.com/post/delete/123、123 - 您的 post id
  • 在服务器端创建可以处理此操作的函数(检查权限,e.t.c),returns true 成功,false 失败。
  • 在客户端,在您的 ajax 处理程序中成功删除 post 元素

示例:

PHP

function delete($id) {
   $result = [];
   try {
      $this->yourPostService->delete($id); // handle your sql here
      $result = ['result' => true];
   } catch(Exception $e) {
      $result = ['result' => false, 'error' => $e->getMessage()];
   }
   echo json_encode($result);
   exit;
}

JS

$.ajax({ url: 'yourl/post/delete/'+id, // your post id
 data: {},
 type: 'post',
 success: function(data) {
              var data = $.parseJson(data);
              if(data.result) {
                 $('#post'+id).remove(); //your post element
              } else {
                 console.log(data.error)
              }
          }
});

我认为一个好的方法是使用 REQUEST_METHOD。

php

switch (strtolower($_SERVER['REQUEST_METHOD'])) {
    case "post":
        someFunctionToSave($_GET["postId"]);
        break;
    case "get":
        someFunctionToRetrieve($_GET["postId"]);
        break;
    case "delete":
        someFunctionToDelete($_GET["postId"]);
        break;
    default:
        break;
}

js

function deletePost (id) {
  $.ajax({ url: 'function.php?postId=' + id,
    data: {},
    type: 'delete',
    success: function(data) {}
  })
}
function savePost (id) {
  $.ajax({ url: 'function.php?postId=' + id,
    data: {},
    type: 'post',
    success: function(data) {}
  })
}
function getPost (id) {
  $.ajax({ url: 'function.php?postId=' + id,
    data: {},
    type: 'get',
    success: function(data) {}
  })
}