0

我有以下 javascript 循环,它正确地提醒我需要在 Codeigniter 方法中使用的值。这是js循环:

function myInsert(){
    $('input[name=r_maybe].r_box').each(function(){
      if( $(this).prop('checked') ){ 
          // need to replace this alert with codeigniter method below
          alert ($(this).prop('value'));                
       } 
    });
}

我需要以某种方式执行此 Codeigniter 方法,而不是提醒所需的值:

//this would never work because it mixes JS with PHP, but I need a workaround
$this->appeal_model->myMethod($(this).prop('value'), 888, 999);

有没有办法可以在 javascript 循环中运行这个 PHP 代码?我知道 PHP 是服务器端,而 JS 是客户端,但我确信我的问题必须有一个我还不知道的解决方案。谢谢。

4

4 回答 4

3

对此的解决方案是对服务器进行 ajax 调用,您可以在控制器上有一个方法来调用您的 codeigniter 方法。这将您的 php 调用和客户端调用分开。

如果要向数据库中插入某些内容,则应使用 ajax post 方法。

http://api.jquery.com/jQuery.post/

function myInsert() { 
  $('input[name=r_maybe].r_box').each(function(){ 
    if( $(this).prop('checked') ){ 
      var value = $(this).prop('value');
      $.post("controllername/functionname", { value: value }, function(data) { 
        alert(data); // Returned message from the server
      }); 
     } 
  }); 
}
于 2013-01-27T17:00:17.877 回答
1

使用ajax将数据存储到服务器端:代码应该是这样的:

 function myInsert(){

        $dataArray=[];

        $('input[name=r_maybe].r_box').each(function(){

          if( $(this).prop('checked') ){ 

              // need to replace this alert with codeigniter method below
              dataArray.push($(this).prop('value'))
              } 
          });

if(dataArray.length>0)
{
    $.ajax({
    url:"your file name",//this file should contain your server side scripting
    type:"POST",
    data:{dataName : dataArray}
    success:function(){
    }

    });       
}
    }
于 2013-01-27T17:00:33.833 回答
1

你可以$.postjquery使用

function myInsert(){
    $('input[name=r_maybe].r_box').each(function(){
      if( $(this).prop('checked') ){ 


        $.post('<?php echo site_url("controllerName/functionName")?>', 
        {"post1": $(this).prop('value'), "post2":888, "post3": 999 },
         function(data.res == "something"){ 
         //here you can process your returned data. 
         }, "json"); //**             
       } 
    });
}

在您的控制器中,您可以拥有:

function functionName()
{
//getting your posted sec token.
   $post1 = $this->input->post('post1'); 
   $post2 = $this->input->post('post2'); 
   $post3 = $this->input->post('post3'); 
   $data['res'] = "something";// return anything you like.
// you should use json_encode here because your post's return specified as json. see **
   echo json_encode($data); //$data is checked in the callback function in jquery.
}
于 2013-01-27T17:16:14.087 回答
0

由于这会将数据直接转储到您的数据库中,因此请确保这也以某种方式得到保护,即谁有权访问该控制器功能以及对传递的数据进行的清理/验证量。

于 2013-01-28T00:34:40.490 回答