2016-09-26 140 views
1

嗨我有一个extbase typo3扩展名。它包含一个窗体的模型窗口。提交ajax调用通过updateAction.My更新基础表。如何通过获取表单参数getArgument ()在controller.My代码方法如下Ajax表单提交 - typo3

给出我的形式是

<form id="updatewindow" method="POST" name="iframe"> 
    <p><label for="fields">' + $(title).html() + ':</label> 
    <input type="text" value="' + cell_data + '" name="tx_suserform_userform[newUser][name]"></p> 
    </form> 

AJAX调用

url_update = '<f:uri.action action="updateFileds" absolute="1" noCacheHash="1"/>'; 
jQuery.ajax({ 
     url: url_update, 
     type: "POST", 
     data: params, 
     success: function (data) { 
      if (data == 'true') { 
       location.reload(); 
      } else { 
      } 
     } 
    }); 

在我的控制,我写

$post_val = $this->request->getArgument('name'); 

但它返回错误

$this->request->getArguments() 

只返回控制器名称和行动

回答

1

$this->request->getArguments()接收格式

$pluggin_signature['argument'] 

所以我通过从ajax.Here该格式的参数后/获取参数是我的代码

 url_update = '<f:uri.action action="updateFileds" absolute="1" noCacheHash="1"/>'; 
    var params = {'tx_pluggin_signature[name]':'test','tx_pluggin_signature[phone]':'(456) 456-2345'}; 
jQuery.ajax({ 
     url: url_update, 
     type: "POST", 
     data: params, 
     success: function (data) { 
      if (data == 'true') { 
       location.reload(); 
      } else { 
      } 
     } 
    }); 
+0

正是..我需要知道的。 –

2

可以使用JavaScript的FormData对象获取表单数据:

url_update = '<f:uri.action action="updateFileds" absolute="1" noCacheHash="1"/>'; 
var params = new FormData(jQuery('#updatewindow').get(0)); 
jQuery.ajax({ 
    url: url_update, 
    type: "POST", 
    data: params, 
    success: function (data) { 
     if (data == 'true') { 
      location.reload(); 
     } else { 
     } 
    } 
}); 

shoul You d可能会使用流体呈现您的表单,否则extbase依赖的某些东西将从表单中丢失(检查任何流体生成表单中隐藏的div)。

要获取将数据发布到的URL,我建议使用扩展名typoscript_rendering - 它是为了这个确切目的而制定的。它会生成一个URL,它不会返回整个HTML页面,而只会返回被调用动作模板的结果。你需要启用cHash来使用它。

+0

当使用FORMDATA我得到了以下错误:TypeError:'append'在未实现接口FormData的对象上调用。 –

+0

你从哪里得到这个错误?在调用'jQuery.ajax',或在'var params'行? – Jost

+0

在jquery.min.js(第6行) –