加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何将AJAX参数传递给extbase操作?

发布时间:2020-12-16 02:45:35 所属栏目:百科 来源:网络整理
导读:现在我设法从数据库中获取值,我想指定更多我想要传递的内容. 从对下面的事件函数作出反应的选择框中,我想读出一个值(记录的uid)并将其传递给我的ajaxAction: var uid; $('#mySelectBox').change(function() { arguments = $(this).attr('value'); var uri =
现在我设法从数据库中获取值,我想指定更多我想要传递的内容.

从对下面的事件函数作出反应的选择框中,我想读出一个值(记录的uid)并将其传递给我的ajaxAction:


    

var uid;
    $('#mySelectBox').change(function() {
        arguments = $(this).attr('value');
        var uri = '<f:uri.action arguments="{uid: '+uid+'}" action="ajax" controller="Mycontroller1" pageType="89657201" />';

        jQuery.getJSON(uri,function(result) {
            // do something
        });
    });

我用参数试了一下,不知道这是不是正确的方法.另外,正如Marcus Biesioroff建议的那样,我应该将我的JS保存到一个单独的文件中,但是我必须自己编写uri而不是Fluid方式,对吧?

我的ajaxAction看起来像这样:


    

public function ajaxAction($uid) {
            $dataFromRepo = $this->myRepository->findByUid($uid);

            $resultArray = array(
                "field1" => $dataFromRepo->getField1(),"field2" => $dataFromRepo->getField2(),"field3" => $dataFromRepo->getField3(),"field4" => $dataFromRepo->getField4(),);
            return json_encode($resultArray);
        }

我确信uid没有正确传递,其他一切都有效.

解决方法

有一些错误:

>你不能用JS破坏vievhelper的语法,即使它被置于视图中,你需要从< f:uri.action />中传递完整的动作路径.
>你不能把这个JS放在视图中,因为它包含大括号,那里有other description of the issue
>你需要从外部文件调用ajax函数并分别传递给它的action链接和uid,然后添加

在视图中:

<script type="text/javascript">
    var actionsPathFromViewHelperSetInTheView 
        = '<f:uri.action action="ajax" controller="Mycontroller1" pageType="89657201" />';
</script>
<script type="text/javascript" src="path/to/ext/Public/yourExternal.js"></script>


<!-- of course this field may/should be created with Fluid's viewhelper -->
<select id="mySelectBox" onchange="performAjaxCall(this)">
    <option value="1">Item 1</option>
    <option value="2">Item 2</option>
    <option value="3">Item 3</option>
</select>

在yourExternal.js中(当然你需要将tx_yourextkey_yourplugin前缀更改为你自己的)

function performAjaxCall(selectFieldObj) {
    $.ajax({
        url: actionsPathFromViewHelperSetInTheView,data:{
            "tx_yourextkey_yourplugin[uid]":selectFieldObj.value
        },success:function (data) {
            // do something with your json
            alert('Load was performed.');
        }
    });
}

在你的控制器中:

public function ajaxAction() {

    // try to always validate the incoming arguments
    if (!$this->request->hasArgument('uid') || intval($this->request->getArgument('uid')) == 0) {
        header('HTTP/1.1 400 Bad Request');
        return json_encode(array('error'=> 'Bad request'));
    }

    $uid = intval($this->request->getArgument('uid'));

    $dataFromRepo = $this->myRepository->findByUid($uid);
    if ($dataFromRepo == null) {
        header('HTTP/1.1 404 Not found');
        return json_encode(
           array('error'=> 'Not found or you have no access or something else... happens...')
        );
    }
    $resultArray = array(
        "field1" => $dataFromRepo->getField1(),// etc...
    );

    return json_encode($resultArray);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读