2015-11-18 6 views
0

Я работаю над веб-приложением, которое использует CakePHP в качестве задней части и JQuery в качестве переднего конца. Для того, чтобы связаться с сервером, я уже создал форму и jquery ajax и браузер, показывающий значение отправленного запроса ajax для URL-адреса в сети. Вот то, что я прямо сейчас:JQuery Ajax Post To Cakephp Controller

Проблема

I want to display ajax post value into add.ctp which is not showing 

Page 1 Где Аякс Работа

<script type="text/x-javascript"> 
$(".hover-star").click(function() { 
$("#hover-test").css("color", "#ff6a00"); 

    var id= $('input[name=starrating]:checked').attr('id'); 

    $.ajax({ 
     type: "POST", 
     url: '<?php echo Router::url(array('controller'=>'Reviews','action'=>'add'));?>', 
     cache: false, 
     data: "id="+id, 
     dataType: 'HTML', 
     success: function(result) { 
      window.open('/app/webroot/reviews/add/'+id,'_self'); 

     },  
     error: function (response, desc, exception) { 
      // custom error 
     } 
    }); 
}); 
</script> 

<form method="post"> 
    <input class="hover-star" type="radio" name="starrating" id="1" value="1" title=""/> 
    <input class="hover-star" type="radio" name="starrating" id="2" value="3" title=""/>  
    <input class="hover-star" type="radio" name="starrating" id="3" value="3" title=""/>  
</form> 

Page 2, где я хочу, чтобы отобразить Аякса желаемое значение Add. ctp

<?php echo $this->ratingPost;?> 

Отзывы Контроллер Добавить функцию

function add() 
{  
    $this->ratingPost= $data = $this->data; 
} 
+0

Что ошибка? –

+0

@AbrarKhan не ошибка, но сеть браузера Chrome, показывающая, что значение ajax отправлено и значение не отображается в файле 'add.ctp' после нажатия на переключатель –

ответ

0

На странице, где Ajax работает

<div id="show"></div> 

успех Аякса будет как

success: function (result) { 
       $("#show").html(result); 
       $("#show").show(); 
      } 
+0

значение отображается в'

', но почему значение не отображается в' add.ctp' не печатать или эхо в файле 'controller.php' –

+0

Ваша версия торта ?? –

+1

версия cakephp 2.0.13 –

2

Похоже, там может быть несколько вещей, идет не так. Сначала вам нужно понять, что AJAX собирается отправлять POST свои данные указанному URL и ждать ответа с сервера. Ответ будет содержаться в «результате».

В этом случае, похоже, вы используете POSTing для/reviews/add. Когда вы это сделаете, ваш метод добавления получит данные сообщения и попытается отобразить файл представления add.ctp. Весь этот рендер - это то, что возвращается к вашему результату AJAX success. В вашем методе добавления вы ничего не задали для представления, и вы не возвращали никаких значений, чтобы ваш «результат» был пустым.

В вашем успехе AJAX вы пытаетесь открыть новое окно, которое снова вызывает метод add, и вы пытаетесь включить параметр «id», который ничего не собирается делать с возвращенным результатом, только попытайтесь снова запустите метод с заданным параметром, но ваш метод не запрашивает никаких параметров в любом случае ...

Если вы хотите, чтобы новое окно открывалось с использованием значения id из щелчка, зачем даже использовать AJAX, просто отправьте id в качестве параметра для вашего метода добавления. Как правило, я думаю, что AJAX используется для динамического обновления содержимого на загруженной странице. Я расскажу о том, о чем я говорю ниже в вашем коде.

Ваш скрипт

<script type="text/x-javascript"> 
    $(".hover-star").click(function() { 
    $("#hover-test").css("color", "#ff6a00"); 
    var id= $('input[name=starrating]:checked').attr('id'); 

    window.open('/app/webroot/reviews/add/'+id, '_self'); 
    } 
</script> 

надстройку Метод

public function add($myID=null){ 
    $this->set('myID', $myID); 
} 

Если вы намерены AJAX, вы могли бы сделать это, как это, создав новый метод для обработки визуализации возвращенный AJAX. Я просто не понимаю смысла. Вам также необходимо будет ограничить то, что вы возвращаете из своего метода AJAX, в безопасное кодирование URL.

AJAX путь

$.ajax({ 
    type: "POST", 
    url: '<?php echo Router::url(array('controller'=>'Reviews','action'=>'add'));?>', 
    cache: false, 
    data: "id="+id, 
    dataType: 'HTML', 
    success: function(result) { 
     window.open('** path to new method for rendering view **'+result, '_self'); 
    },  
    error: function (response, desc, exception) { 
     // custom error 
    } 
}); 
+0

спасибо jadedcore –