отправка данных через ajax в Cakephp

Я новичок в 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


person hellosheikh    schedule 06.07.2013    source источник
comment
где находится ваше поле ввода, добавьте html   -  person M Khalid Junaid    schedule 06.07.2013
comment
@dianuj это всплывающее окно, значение находится в этом значении переменной $ .modal.prompt ('Пожалуйста, введите значение:', значение функции (значение) находится в этом значении переменной   -  person hellosheikh    schedule 06.07.2013


Ответы (2)


Его просто отправить значение в контроллер и делать то, что вы хотите, в запросе 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();
    }
   }

Для получения дополнительной информации см. доступ к пост-данным

person M Khalid Junaid    schedule 06.07.2013
comment
спасибо, я думаю, что это работает, поскольку это правда, но как я могу проверить значение? я имею в виду, как я могу увидеть, получает ли переменная данные из ajax или нет в контроллере ... я сделал это значение echo $ ... но ничего не распечатывает - person hellosheikh; 06.07.2013
comment
ваше ОК тоже не распечатывается - person hellosheikh; 06.07.2013
comment
просто повторите $ _POST ['value_to_send'] или посмотрите мой обновленный ответ, сначала проверьте, идет ли он в проверке if if( $this->request->is('ajax') ) или нет ?? - person M Khalid Junaid; 06.07.2013
comment
спасибо, дианудж .... хорошо, я думаю, вы можете больше рассказать мне, как это можно сделать, используя глупые вещи ... я имею в виду, в стиле cakephp - person hellosheikh; 06.07.2013
comment
ваш ajax запрос отправляет данные, которые я предоставил по ссылке в cake php, как получить опубликованные значения book.cakephp.org/2.0/en/controllers/ - person M Khalid Junaid; 06.07.2013

Приведу вам пример. В моем случае список книг выводится как умный поиск при вводе текста в текстовое поле.

$( ".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);
    }
person Sadee    schedule 19.02.2016