2013-07-06 141 views
2

我是cakephp的新手,并试图从ajax发送数据到我的控制器动作.. 我有一个弹出式模型,其中有一个输入框..我想抓住该值并发送到控制器无需刷新页面在Cakephp通过ajax发送数据

这里是我的代码..

<a class="button anthracite-gradient" onclick="openPrompt()">submit </a> 

我的javascript

function openPrompt() 
{ 
var cancelled = true; 

$.modal.prompt('Please enter a value:', function(value) 
{ 

    $.ajax({ 
     type:"POST", 

     url:"/cakephp/controller/action/", 
     success : function(data) { 
      alert(value); //value right now is in this variable ... i want to send this variable value to the controller 

     }, 
     error : function() { 
      alert("false"); 
     } 
    }); 


    }, function() 
    { 

    }); 
    }; 
</script> 

myController的

public function action(){ 
    if($this->request->is('ajax')) { 
     $new = $this->request->data; 

     echo "ok" 
     return; 
    } 
} 

我想在这里首先得到的值,然后发送响应可能

+0

哪里是你的输入框中添加HTML –

+0

@dianuj其弹出框,,值在这个变量“值”$ .modal.prompt('请输入一个值:',函数(值)值是在这个变量值 – hellosheikh

回答

3

其简单的岗位价值Ajax请求控制器,做你想做的,在Ajax请求在data:{value_to_send:value}结合的价值并获得控制器

function openPrompt() 
{ 
var cancelled = true; 

$.modal.prompt('Please enter a value:', function(value) 
{ 

    $.ajax({ 
     type:"POST", 
     data:{value_to_send:value}, 
     url:"/cakephp/controller/action/", 
     success : function(data) { 
      alert(data);// will alert "ok" 

     }, 
     error : function() { 
      alert("false"); 
     } 
    }); 


    }, function() 
    { 

    }); 
    }; 
</script> 

public function action(){ 
    if($this->request->is('ajax')) { 
    // echo $_POST['value_to_send']; 
    echo $value = $this->request->data('value_to_send'); 

    //or debug($this->request->data); 
     echo "ok" 
     die(); 
    } 
    } 

更多看到accessing-post-data

+0

谢谢你,我认为它的工作原因是它警告“真实”,但我怎么能检查值?我的意思是我怎样才能看到变量是否从控制器中获取数据ajax或不在控制器中...我已经完成了这个回声$值...但没有任何打印出来 – hellosheikh

+0

你的“ok”也不打印出来 – hellosheikh

+0

只是回显$ _POST ['value_to_send']或者看到我更新的答案,先检查它是否在if检查中if if($ this-> request-> is('ajax' ))'或不? –

1

我会举几个例子。在我的情况下,在文本框中输入时,列出书单作为智能搜索。

$(".selectBook").each(function(){ 
    $(this).keyup(function(event) { 
     var tri = $(this).val(); 
     var oPrnt = $(this).parents('.smartsearch'); 
     var str = ''; 
     if(tri.length > 2){ 
      $.ajax({ 
       type: "POST", 
       url: "/utility/getbooks/", 
       data: JSON.stringify({string: tri, activeonly:false}), 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (data) { 
        $.each(data, function(key, val) { 
           str += '<li id="a'+key+'" term="'+val+'" data-did="'+key+'">'+val+'</li>'; 
        }); 
        oPrnt.find("ul.result").html(str); 
       }, 
       error: function (errormessage) { 
        oPrnt.find("ul.result").html('<li><b>No Results</b></li>'); 
       } 
      }); 
      oPrnt.find("ul.result").slideDown(100); 
     } 

    }); 
}); 

并在控制器,动作(getbooks行动UtilityController在我的情况)

public function getbooks($string = '', $activeonly = true){ 

     $this->autoRender = false; 

     if($this->request->is('ajax')) { 
      $data = $this->request->input('json_decode'); 
      $string = $data->string; 
      $activeonly = $data->activeonly;    
     } 

     $aReturn = array(); 
     // ... fetch books data from DB goes here... 
     $aResult = $this->Book->fetch('list'); 
     foreach($aResult as $r){ 
      if(isset($r['bookname'])){ 
       $aReturn[$r['id']] = $r['bookname']; 
      } 
     }    
     return json_encode($aReturn); 
    }