PHP - $.POST 通过两个文件两次

标签 php jquery syntax-error

简化目标:通过 $.POST 将变量传递到 PHP 文件 (get.php),然后 get.php 将 $.POST 变量再次传递到 db.php。

我的问题

我试图在我的 PHP 代码中遵循模型- View - Controller 设计模式。

我将有三页:

  1. index.php - GUI(基本上是 HTML 和 DIV 标记)
  2. get.php - 隐藏的 php,通过 AJAX + POST 将代码提供给 index.php 中的 div
  3. db.php - 数据库连接部分

explanation image 基本上,我想通过两个 POST 请求接收响应

到目前为止,我已将 index.php 发布到 get.php 并请求某些数据,这些数据通过 AJAX 和 jQuery 返回并更新用于动画。

这是一个代码片段:

function get(div,id,opt_username) { 
$.post('get.php', { request: id },
function(response) {
    // In this order, first fadeout div
    $(div).fadeOut(600, function() {

        // If we pass a username as optional parameter...
        if (opt_username) { 
            //Prepend username onto response
            response = "     Welcome " + username + response;   
        }

        // Then get the response back HIDDEN
        $(div).html(response).hide(function() {
                // Once completed, parse with XFBML so everything renders
                FB.XFBML.parse(document.getElementById(div));
                // Only after everything's parsed do we fade back in
                $(div).fadeIn(1100, function() {}); 

        });
    });
});
};  

现在我可以对 get.php 执行 POST 请求,但如果我尝试在 get.php 中执行相同的操作以发布到 db.php(以执行数据库操作),这似乎不起作用。

我的目标

index.php -> 请求数据 -> get.php -> 请求数据库连接 -> db.php -> 返回数据 -> get.php -> 返回数据 -> index.php

这将允许我将数据库层切换到另一个层。例如,我目前正在使用 RDBMS,但我想将来切换到 XML/RDFXML,这意味着我所要做的就是将 db.php 切换为另一种,一切仍然有效,与MVC。

我的问题

  1. 首先,我是否可以向页面发送一个 POST 来进行另一个 POST,如果可以,为什么会出现以下错误?
  2. 我是否以正确的方式使用 Model View Controller 方法

进一步说明

这里是 get.php(第二页)中的一个代码片段,它抛出一个错误:

$.post('db.php', { test: 2 },
    function(response) {} );

抛出错误:

Parse error: syntax error, unexpected '.', expecting T_VARIABLE or '$' 

结论

我根本无法让index.php发布到get.php,进而发布到db.php。

最佳答案

必须发布两个帖子吗?

我不知道你的文件是什么样的,但现在我猜测它们都是常规的 php 文件,当你需要实现该页面的功能时,你会为每个页面复制这些文件,所以我的答案是尝试适应这一点,但正如我所说,我不知道您的文件实际上是什么样子,因此这可能不适合您的工作方式。

也就是说,根据我认为您使用文件的方式,这就是我的建议。

与其尝试在页面之间发布两个帖子,为什么不直接将 $_POST 数组传递给类中的方法呢?

例如(伪代码):

您的index.php(通过AJAX发布到get.php):

<form action="/uses/ajax/to/post/to/get.php" method="post" name="data_form" id="data_form">
    <input type="text" name="data" id="data" />
    <input type="text" name="more_data" id="more_data" />
    <input type="submit" value="Post this data" />
</form>

<script>
    // Your ajax post code here
</script>

您的 get.php:

<?php
$post_data = isset($_POST) ? $_POST : die('No post data was sent');

include($_SERVER['DOCUMENT_ROOT'] . '/Model_Object.php');

$Model_Object = new Model_Object();

// This would echo your response for the ajax
echo $Model_Object->create_something($post_data);

然后,您可以创建一个 Model 类(包含在 get.php 中),而不是只有 db.php:

Model_Object.php:

<?php
class Model_Object {
    public function create_something($post_data) {
        $data = isset($post_data['data']) ? $post_data['data'] : '';
        $more_data = isset($post_data['more_data']) ? $post_data['more_data'] : '';

        // MySQL query here
        $success = true;

        if($success) {
            return 'Completed';
        }

        return 'Failed';
    }

    public function create_something_else($post_data) {
        return 'This can do a different MySQL query';
    }
}

这不是最好的方法,但考虑到您对自己的代码的解释以及我认为您的代码的工作方式,这可能是您的解决方案。

至于以正确的方式进行 MVC 方法,我不知道这是否是最好的方法,但是,当我从头开始编写 MVC 应用程序时,我设置了一个 .htaccess 文件将所有请求路由到根 index.php,这将根据 URI 决定要创建哪个 Controller 对象以及该 Controller 中的哪个方法执行。

该方法可能包含一些代码来显示 View ,或者创建一个 Model 对象来与数据库交互。

如果要创建模型,那么它会将任何相关信息传回 Controller ,并且 Controller 将执行其需要的操作从那里开始做。

例如,如果我转到 /my_controller/my_action 那么 index.php 文件将创建 My_Controller 对象(如果存在),如果存在,则尝试执行该对象中名为 my_action 的方法。

希望这对您有所帮助,如果我的理解有误,请见谅。

关于PHP - $.POST 通过两个文件两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8236255/

相关文章:

python - 使用GeoPy时出现打印问题

php - 在 php 中回显 session 变量

php - PostgreSQL 和 PHP 连接问题

php - 希望散列从用户输入到 mysql 数据库的密码

javascript - JS : Filling 3 fields with one click

python-2.7 - python simpy错误返回生成器内部的值

php - 我们可以在 yii 中指定默认 Controller 和操作

php - 关联数组索引命名约定

jquery - 为什么 jQuery 的 .not() 方法会删除文本节点?

javascript - JQuery如何正确设置 slider 效果