【问题标题】:Codeigniter not detecting form on jQuery sendCodeigniter 未检测到 jQuery 发送上的表单
【发布时间】:2012-12-04 17:34:53
【问题描述】:

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

情况

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

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

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);
        }  
    });
},

Ajax 请求

一切都在客户端上顺利运行,使带有 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';

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

【问题讨论】:

  • @John B - 我已按要求添加了 javascript URL 请求代码。
  • 所以您已经验证 ajax 使用控制台成功发布到控制器,对吗?
  • @John B - 这是一个正确的假设。我的问题中标记为 AJAX 请求的那部分是发送的参数,如果控制器没有检测到表单发送,它最终会返回一个带有表单的默认 JSON 集,等等。
  • 你试过 var_dump($_POST);exit;或 var_dump($this->input->post());页面加载后在控制器内部查看发布数据是否正在生成?
  • @Jonh B - 非常感谢您在调试时一直支持我并提供帮助;现在问题解决了。事实证明,我现在工作的客户正在使用 CodeIgniter 模块来进一步支持语言,并且它一直在重写 URI,并且数据肯定已经被转储了。再次感谢您的帮助

标签: ajax codeigniter validation


【解决方案1】:

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

因此,如果您曾经使用过 Wiredesignz - Language Identifier,请注意它可能会影响您的查询

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

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

您现在应该会发现一切正常。我希望这会有所帮助,没有其他人需要花费很长时间才能发现这一点

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 2019-05-21
    • 1970-01-01
    • 2018-04-05
    • 2020-09-29
    • 1970-01-01
    • 2012-04-02
    • 2016-05-30
    • 1970-01-01
    相关资源
    最近更新 更多