javascript - post 参数未传递 zend 框架 2

标签 javascript php ajax zend-framework

我在通过 ajax 调用将 post 参数传递给 Controller ​​操作时遇到了一些问题。我不确定它为什么这样做,因为其他 ajax 调用按预期执行。我得到的响应如下:

Notice: Undefined index: user_bio in C:\xampp\htdocs\module\Members\src\Members\Controller\ProfileController.php on line 149

Controller 代码是:

public function changebioAction()
{
    $layout = $this->layout();
    $layout->setTerminal(true);

    $view_model = new ViewModel();
    $view_model->setTerminal(true);

    if ($this->request->isPost()) {
        try {
            $params = $this->params()->fromPost();

            $this->getProfileService()->editProfile(array('bio' => ltrim($params['user_bio'])));
        } catch (ProfileException $e) {
            $this->flashMessenger()->addErrorMessage($e->getMessage());

            return $this->redirect()->toRoute('members/profile', array('action' => 'change-failure'));
        }
    }

    return $view_model;
}

javascript 和 html:

// handle quick edit of bio
function quickEditBio(element, button) {
    var edited_data = $(element).html();

    var data = $(element).blur(function() {
        edited_data = $(element).map(function() {
            return this.innnerHTML;
        }).get();
    });

    $(button).on('click', function() {
        $.ajax({
            method : "POST",
            url : "/members/profile/change-bio",
            data : {
                user_bio : edited_data[0]
            }
        }).done(function(msg) {
            // bio saved
            // go back to profile page
            //location.href = '/members/profile';
            alert(msg);
        }).fail(function() {
            alert("Error changing bio, please try again.");
        });
    });
}

<button onclick="expand('bio')" class="w3-btn-block w3-theme-d2 w3-left-align">
                <i class="fa fa-book fa-fw w3-margin-right"></i> Bio
            </button>

            <div id="bio" class="w3-accordion-content w3-container">
                <div class="w3-display-container">
                    <p id="bio-user" contenteditable="true">
                        <?php echo $this->layout()->bio; ?>
                    </p>

                    <div class="w3-display-right">
                        <button class="w3-btn-block w3-theme-d2" id="save-bio">Save</button>
                    </div>

                    <script type="text/javascript">
                        quickEditBio('#bio-user[contenteditable=true]', $('#save-bio'));
                    </script>
                </div>
            </div>

如前所述,我得到的错误是索引 user_bio 未定义:

Notice: Undefined index: user_bio in C:\xampp\htdocs\module\Members\src\Members\Controller\ProfileController.php on line 149

真正令人困惑的部分是其他部分使用相同的代码并且工作得很好。

如有任何帮助,我们将不胜感激。

谢谢!

最佳答案

问题在于您的 JavaScript。

每次您在元素上“模糊”时,它都会将您的 edited_data 变量设置为一个空数组。

edited_data[0] 然后变为未定义,并将注释发布到您的 php。

这意味着 $params['user_bio'] 将是一个 undefined index ,因为 user_bio 没有作为参数接收。

解决这个问题:
删除 $(element).map 并将其替换为 $(element).html();
还要将 edited_data[0] 更改为 edited_data,因为这将不再是数组。

关于javascript - post 参数未传递 zend 框架 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42183201/

相关文章:

php - 我想知道如何在我的 Controller (laravel)中不使用 faker 技术的情况下在我的数据库 Mysql5.7 中获取一些字段

javascript - AJAX和php JSON连接DB并返回值

php - 仅使用常规 Javascript 刷新页面中的一个 <div>

javascript - MVC 中对象列表的排序

javascript - jqGrid 显示 'edit' 图标用于行内编辑

php - 分页更新数字

javascript - 如何在 php 语言(或 javascript)上将 InDesign 文件与 XML 标签文件粘合?

javascript - JQuery/JavaScript 键盘事件

php - 在文本区域中输入数字或字符时如何减少计数

php - $key=$_REQUEST ['key' ] 不起作用