将键值对作为单独的数据Ajax发布


Posting key value pair as individual data Ajax

我正在构建一个函数,该函数使用Ajax将数据发布到我的Codeigniter控制器。问题如下:

Codeigniter需要单独的post数据(没有对象)来允许我完全验证数据。否则,我需要将验证规则用作离散方法,而有些规则,如xss_clean,不能作为离散方法使用(请参阅CI文档)。因此,我需要像这样在Ajax中发送数据。

data: {
    username: username,
    password: password
},

我现在有一个数组传递给post函数。

{'username': $("#username").val(), 'password': $("#password").val()};

我需要将这个数组重新构建为上面的Ajax数据。我尝试了Ajax POST函数中的循环和.each()函数,但这不起作用。

任何人对如何解决这个问题有任何想法,并允许我将数组传递给post函数,但也允许我分离这些数据,以便用Codeigniter验证它。

要在Ajax的帮助下发布数据,只需使用JSON.stringify()方法。如下

 data : JSON.stringify({username: $("#username").val(), password: $("#password").val()})

它将Javascript对象转换为JSON文本并将JSON文本存储在字符串

我设法在Stackoverflow上使用这个问题解决了这个问题。Codeigniter需要POST数据来正确验证数据。为了验证每个数据,需要将数据分开。这就是我试图用Ajax POST函数实现的。Ajax POST函数发送一个包含所有表单数据的数组,该数组为,未分隔为。对于这个数组,我无法使用Codeigniter规则验证数据。

这个问题的解决方案不是尝试在Ajax发布时分离这些数据,而是在后端获取这些POST数据时分离这些数据。POST数据由后端作为对象获得。通过在PHP中循环此POST数据,可以声明新的POST索引,就像表单本身直接发布一样。这听起来有点神秘,下面的代码可以澄清它:

login.php(view) -包含表单的页面,该表单将数据发送给名为'postajax'的函数。这是一个包含基本Ajax post请求的函数。

$(document).ready(function(){ 
    $("#submit").click(function(){
        postvalues = {username: $("#username").val(), password: $("#password").val()};
        postajax('Login', postvalues);
        return false;
    });
});

Login.php(controller) -处理POST数据的控制器。要验证此文件中的数据,需要分隔POST数据。

foreach($_POST['data'] as $key => $value){
    $_POST[$key] = $value;
}

现在,POST数据按照Codeigniter期望的方式分离,并且可以对数据使用常规验证。例如,如果数据数组中包含一个键值对username => 'Testuser',则可以像普通格式一样进行验证。

$this->form_validation->set_rules('username', 'Username', 'required');

谢谢你的帮助!

这是我的POST .js文件与POST函数。

function postajax(page, postvalues){
    $("#result").empty();
    $.ajax({
        type: "POST",
        url: page, 
        data: {
            data: postvalues
        },
        dataType: "text",  
        cache:false,
        beforeSend: function(){
            $("#loading").css({ visibility: "visible"});
        },
        success: 
        function(data){
            $("#loading").css({ visibility: "hidden"});
            $('#result').html(data);
        }
    });
 }

我认为你有你需要的

{'username': $("#username").val(), 'password': $("#password").val()};

,我认为这将是AJAX调用的data:选项的值。

该对象将出现在服务器端的$_POST数组中。例如,如果输入值是'A Name'和'thisisthepassword',那么var_dump($_POST);将生成

array (size=2)
  'username' => string 'A Name' (length=6)
  'password' => string 'thisisthepassword' (length=17)

使用CI方法,您可以像这样访问已发布的数据

$username = $this->input->post('username');
$password = $this->input->post('password');

JQuery完成将对象转换为适当的数据结构以便发布到服务器的所有工作。