2013-07-18 53 views
0

对不起,提出这个问题..我正在Cakephp 2.x ...我有我的控制器名称文件夹中的查看页面,例如Controller/index.ctp ...和我有ajaxfiles存储在应用程序/ Webroot公司/ AJAX/ajaxfile.htmlCakephp:查看页面上添加另一个视图页面链接

现在在我的index.php文件我正在acessing Ajax页面这样

   <a href="ajax-demo/ajaxfile.html" class="file-link"> 
            <span class="icon file-png"></span> 
            Simple gallery</a> 

控制器

 public function index(){ 


     } 

现在的问题是我想将变量发送到我的两个页面... index.ctp和ajaxfile ...我该如何做到这一点?什么是解决这些事情的最佳途径....

我必须从webroot移动ajaxfiles并将其粘贴到控制器名称文件夹下吗? 如果是这样那么我怎么能发送变量到ajax文件没有模型和控制器

请如果任何人知道解决方案,然后请指教我。并给出一个例子太

+1

您无法将变量传递给html文件。你将不得不为它创建一个ctp。并通过控制器中定义的适当方法传递它。 –

+0

谢谢你让我知道 – mynameisjohn

回答

1

有不同的方式来实现这一点,我在这里写一个最简单的

首先,你需要你的“index.ctp”文件移动到“查看/你的控制器名称/ “文件夹。

1)为了访问可变鉴于你需要从你的控制器的方法对其进行设置这样

public index(){ 
    $this->set('yourVariable', 'Your Value'); 
} 

2)要在您的视图文件(index.ctp)访问该值,则需要调用这个变量这样

$yourVariable;//If you want to print this then you can write like this 
echo $yourVariable; 

3)如要index.ctp调用AJAX文件最简单的方法是调用这种定位的一个onclick事件,onclick事件将调用JavaScript方法,这将进一步使AJAX调用并将输出放置在index.ctp中的元素中,ajax cal L将进一步调用你的控制器的方法(实现你的HTML与此逻辑)

例如,

<a href="#" class="file-link" onclick="yourAjaxCallMethod('http://'.<?php echo $_SERVER['HTTP_HOST'].$this->webroot;?>.'yourController/ajaxMethod/'.<?php echo $yourVariable;?>)"><span class="icon file-png"></span>Simple gallery</a> 

<div id="yourAjaxFileOutputReplaceMentDiv"></div> 

4)创建您的JS文件JavaScript方法,这个JS文件必须在布局文件中加载。

function yourAjaxCallMethod(BaseURL,yourVarible) 
{ 
    //Initialize Ajax Method 
var req = getXMLHTTP();//Let's this method Initialize your Ajax 

if (req) 
{ 
    req.onreadystatechange = function() { 
    if (req.readyState == 4) 
    { 
    if (req.status == 200) 
    { 
      document.getElementById('yourAjaxFileOutputReplaceMentDiv').innerHTML=req.responseText; 
    } else { 
    alert("There was a problem while using XMLHTTP:\n" + req.statusText); 
    } 
    } 
    }   
var URL = BaseURL+yourVarible+'/'+Math.random();  
req.open("GET", URL, true); 
req.send(null); 
} 
} 

5)您的控制器“yourController”中的AJAX文件相关方法。设置autoRender为False

public function ajaxMethod(){ 

$this->autoRender = false; 
//Check $this->request['pass'] for arguments send from ajax call 
$retreivedVariable = $this->request['pass'][0]; 
echo 'I retrieved variable'.$retreivedVariable;  
} 

然而,而不是写核心JavaScript和Ajax方法可以调用inbuild阿贾克斯帮手一样。

+1

谢谢你rohit为您的详细答案..但我认为arun权利.i必须使功能和所有的东西... – mynameisjohn

+0

是的,如果你详细阅读答案你会发现东西是方法你的控制器像你的index.ctp是你的控制器中的一种方法,即index(),你的ajax相关文件不过是你的控制器中没有视图(.ctp文件)的方法,它正在推销你的内容。要以更加严谨的方式实现它,请使用元素来呈现HTML部分。您可以将视图(.ctp)文件中的变量传递给您的元素 –

相关问题