1

我在这里有点疯狂,因为我对正在发生的事情一无所知。经过大量的挖掘,我相信我正在做所有应该做的事情。

情况

我正在尝试通过 AJAX 将用户创建表单发送到服务器,而 codeIgniter 甚至无法通过这部分

if($this->input->post('blnAjax')) { // do something } 我已经成功地将 AJAX 方面的东西整合到客户端中,因为它从服务器获取内容几乎没有问题。以下是通话中涉及的一些细节:

阿贾克斯代码

ajax 代码是超出此问题范围的更大框架的一部分,但就实际调用函数而言,事件必须event.preventDefault(); event.stopImmediatePropagation();阻止它运行。URL 是可访问的,并且 post 值已被序列化,请求类型设置为 POST

requestpage: function(){
    var strURL = params.strBaseURL + params.strRequestURL;
    $.ajax({
        type: params.strRequestMethod,
        url: strURL,
        data: params.strRequestParameters,
        dataType: 'json',
        success: function(json) {
            methods.postrequestprocedure(json);
        }  
    });
},

阿贾克斯请求

一切都在客户端上顺利运行,使带有 json 的 XMLHttpRequest 按预期返回。但是,当表单已提交时,我什至没有达到这一点。如果使用 AJAX,Codeigniter 永远不会认为表单已经设置

Parameters application/x-www-form-urlencoded
blnAjax 1
user_login_name[]   fred
user_login_name[]   ted
user_name[] Fred Flintstone
user_name[] Ted bear
usergroup_id[]  16
usergroup_id[]  16

控制器

在控制器上,关于操作,我已经包含了直到失败点的所有代码。请注意,我已经测试了代码的其他方面并且它们运行良好

public function user_add() {
/* Include extra script files needed for form handling */
$this->view['aryScript'][] = 'jquery.validate.min';
$this->view['aryScript'][] = 'jquery.validate.additional-methods';

/* Include extra CSS files */
$this->view['aryCSS'][] = 'form';
/* First check if the user has correct access rights */
if($this->view['intAccessLevel'] < INT_SUPER_USER_ACCESS_LEVEL) {
    $aryResponse['notifications'][] = array('strType' => 'permanent',
                                        'strMessage' => 'Denied!');
}

/* Import extra libraries and helpers */
$this->load->library(array('PasswordHash'));
$this->load->model('UserAdminModel');

$this->view['strTitle'] = 'Add User';
$this->view['aryButtons']['user_add_another'] = array(
     'strDisplay' => $this->lang->line('user_add_another')
     'strURL' => '#',
     'strID' => 'user_add_another',
     'aryData' => array('action' => 'form-clone')
);

if($this->input->post('blnAjax')) {
    echo 'Big sigh of relief';

感谢您花时间阅读我的问题

4

1 回答 1

0

答案从来没有看起来那么简单!我的客户端正在使用 CodeIgniter 模块来重写 URI,从而转储从 ajax 查询传递的数据。执行获取和“真实” POST 查询时没有问题。

因此,如果您曾经使用过Wiredesignz - 语言标识符,请注意它会影响您的查询

我如何修复它,我使用自定义页面控制器,但理论是一样的:

  • 确保您$this->config->item('language_abbr');可以通过常量使用您的 javascript 函数,或者如果在同一页面上直接将其回显到 javascript 中
  • 在发送之前修改 URL,使用类似于params.strBaseURL + params.strLanguage + '/' + params.strRequestURL;

您现在应该会发现一切正常。我希望这会有所帮助,没有其他人需要花一小段时间来找出答案

于 2012-12-04T19:26:16.853 回答