Я новичок в 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; } }
Я хочу сначала получить значение здесь, а затем отправить ответ на запрос ajax.
Его простая публикация значения для контроллера и выполнение того, что вы хотите, в ajax-запросе data:{value_to_send:value}
значение в data:{value_to_send:value}
и 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(); } }
Подробнее см. Доступ к пост-данным
Я приведу вам пример. В моем случае перечислите список книг в качестве интеллектуального поиска, набрав текстовое поле.
$( ".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 Action в 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); }