【问题标题】:How to send AJAX data from VIEW to CONTROLLER? (PHP(MVC)+AJAX)如何将 AJAX 数据从 VIEW 发送到 CONTROLLER? (PHP(MVC)+AJAX)
【发布时间】:2015-02-28 20:26:12
【问题描述】:

我有http://visiting/blog 页面。

Controller 包含 action_index 和 add_index 方法。 Action_index() 返回索引页面。 Add_index()调用模型的方法add_data(),将数据从表单插入到数据库中。

我需要用 ajax-request 组织我的应用程序,http://visiting/blogpage 在提交表单后不会刷新。

查看

    $.ajax({
        type: 'POST',
        url: '???',   --------------------------> What should URL contain?
        data: $(this).serialize()

控制器

    function action_add() {

        $title = $this->cleanStr($_POST["title_field"]);
        $text = $this->cleanStr($_POST["text_field"]);



        if ($title!="" && $text!="") {
            $this->model->add_data($title, $text);              
        } else {
            throw new Exception("Data is empty");
        }

    }

型号

   public function add_data($title, $text) {
        try {
            $query="INSERT INTO post (title, text) VALUES('$title', '$text')";
            self::$db->query($query);
        } catch(Exception $e) {
            echo $e->getMessage();
        }
    }

查看
它是一个带有 ajax-request 的完整 html 文件。 我想处理表单,页面不刷新,数据发送到数据库。

  <div class="blog">
    <h1> Blog </h1>
    <form onsubmit="return validate()" id="add_form">
        <fieldset>
            <legend>Add new post:</legend>
            <label>Title:</label><br>
            <input type="text" name="title_field" id="titlef">
            <br>
            <label>Text:</label>
            <br>
            <textarea name="text_field" id="textf"></textarea>
            <br>
            <input onclick="return validate(); return false" type="submit" value="Submit">
            <input onclick="return resetclass()" type="reset" value="Reset">
        </fieldset>
    </form>

    <div class="blogposts">
        <div id='response'></div>
        <?php
            foreach ($data as $values) {
                echo "<div class=\"blog_item\">";
                echo "<h4 class=\"blog_item_title\">" . $values["title"] . "</h4>" . 
                "<div class=\"blog_item_text\">" . $values["text"] . "</div>" .
                "<div class=\"blog_item_time\">" . $values["time"] . "</div>";
                echo "</div>";
            }
        ?>
    </div>
</div>
<script>
$(document).ready(function(){
    $('#add_form').submit(function(){

        // show that something is loading
        $('#response').html("<b style=\"font-size:20px; margin:40px;\"\">Loading ...</b>");


        $.ajax({
            type: 'POST',
            url: '???',   ------------> What should be into url?
            data: $(this).serialize()
        })
        .done(function(data){

            // show the response
            $('#response').html(data);

        })
        .fail(function() {

                // just in case posting your form failed
                alert( "Posting failed." );

        });
        // to prevent refreshing the whole page page
        return false;

    });
});
</script>

【问题讨论】:

    标签: javascript php jquery ajax model-view-controller


    【解决方案1】:

    url 应该是您想要访问的控制器方法的路径。您不必在 url 中包含基本路径(但如果您愿意,也可以)。就像这样:

    url: "howeverYourStructureIs/Action_index",
    

    点击方法action_index()。您可以将 ajax 想象为“好像您要点击该页面,但实际上并未导航到该页面”之类的东西。所以不管你通常会点击那个方法,是你在 ajax 调用中输入的 url。

    希望对你有帮助

    【讨论】:

    • 嗨,谢谢你的帮助,但有一个问题:我输入了 url "blog/action_add",这个方法在按下提交按钮后会打开一个空白页面。
    • @DmytroBorysovskiy,在您按下按钮时的 javascript 调用中,您是否阻止了 Default() 事件?因为听起来它根本不打扰 ajax,所以它遵循“提交”类型的按钮事件
    • 而不是 preventDefault() 我返回了false
    • @DmytroBorysovskiy 您能否编辑您的问题并发布您单击的按钮的 html 以及带有 ajax 调用的 js 函数?通过添加的信息,我/任何查看问题的人都可以更好地帮助您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多