gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:48:06 24 4
gpt4 key购买 nike

现在我设法从数据库中获取值,我想指定更多我想要传递的内容。

从对下面的事件函数使用react的选择框中,我想读出一个值(记录的 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 没有正确传递,其他一切正常。

最佳答案

有一些错误:

  • vievhelper的语法即使放在view中也不能破坏,需要通过来自 <f:uri.action /> 的操作路径
  • 你不能把这个 JS 放在 View 中,因为它包含大括号,还有 other description of the issue
  • 您需要从外部文件中调用ajax 函数并将action 的链接和uid 分别传递给它,然后添加

  • 在 View 中:
    <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.');
    }
    });
    }

    在您的 Controller 中:
    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);
    }

    关于ajax - 如何将 AJAX 参数传递给 extbase 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10737033/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com