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


ajax url point to a php function in seperatet file

我在ajax方面遇到了一些问题(从未使用过它(。我想从选项卡中删除所选行,而不刷新页面,也不为查询创建新文件。如果可能的话,我想保留functions.php中的所有函数?

我这里有三个文件。

  • index.php
  • ajax.js
  • functions.php

索引文件:

$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();
}

真正的解决方案:

  • 构建一些可以从浏览器调用的操作,例如yuorurl.com/post/delete/123123-您的帖子id
  • 在服务器端创建可以处理此操作(检查权限,e.t.c(的函数,并在成功时返回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) {}
  })
}
$.ajax({ url: 'FUNCTIONS.PHP',
     data: {action: 'delete', delete: '123'},
     type: 'post',
     success: function(output) {alert(output);}
});

在功能中.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>

您的功能.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();
}
?>