2009-10-14 54 views
1

目前,我正在使用自己的MVC框架。我想要做的就是用jQuery做一个Ajax调用(取下那部分),然后从控制器调用一个方法,以便我可以将get变量传递给它并获得我想要从Ajax调用返回的输出。使用Ajax请求调用类

我不能刷新页面,因为它是一个完整的表格页面,我不希望每个上一些刷新重置。我也不能将它传递给一个“handle.php”,我可以拥有我需要的功能,因为模型和控制器的要点是什么?

我该怎么办?或者更重要的是,处理这种事情的最佳方式是什么?我可以再次加载我需要的类(因为我使用的扩展,需要大约6个)并实例化一个调用适当方法的新对象?

我想这是我自己的努力打造,而不是学习的东西像Zend的我自己的MVC框架的错,但什么是木已成舟。任何帮助将不胜感激,只需要指出正确的方向。

回答

1

从你的问题来看,有点难以找出你试图获得什么样的数据。你需要获取数据填写表格吗?或者您是否需要使用PHP脚本将数据从表单传回数据库?

在这两种情况下,我想'handle.php'脚本可能会正常工作。只需制作一些可处理传入数据的基本脚本,验证它并加载相应的类(可能使用__autoload)将其保存在数据库中。

+0

基本上,我有一个名为游乐场网页。我希望它能够有各种我正在测试或玩的东西。就像一个窗体是一个随机的单词生成器,而另一个窗体则需要文本来从字符串的一端向另一端应用渐变。只是随机的东西,实际使用很少。 但我想使用ajax,因为我不想重置表单,并且我有将来的计划将某些表单作为先前表单的输出的innerhtml。另外,不想为此使用会话。 – NeoTubNinja 2009-10-17 18:21:48

1

你很可能想向页面发出请求,就像调用其他控制器/方法组合一样。例如,假设您正尝试呼叫控制器Ajax和方法更新 ...您希望有URL路由,因此您只需链接到/ajax/update。这是理想的解决方案。

在这样你会想你的呼应效果,而不是试图显示模板/布局/视图组合的方法。这可能意味着你需要调整你的CMS以允许这样的事情,但希望不是。

您的方法更新应该更有可能访问全局变量$ _POST和$ _GET,以便您可以检索从AJAX请求提交的数据。

+0

我目前的网址方案是/ page/action/query。因此,如果我在页面上进行搜索,它会看起来像/ books/search/plato。调用类“书籍”的控制器调用方法“搜索”并将“柏拉图”传递给搜索方法。所以我现在在哪里有一个/游乐场页面。在课堂内部,我有一些我想应用于某些用户输入文本区域的“渐变”方法。所以我想通过$ _GET发送表单,然后调用不在“handle.php”中的“渐变”。我可以把它放在那里,但那时控制器对我来说是无用的。 – NeoTubNinja 2009-10-17 18:34:29

1

你应该有一些方法来确定你正在调用哪个命令,所以控制器可以确定你需要去的地方。

例如,如果在一个窗体#和指挥通行,您的控制器可通过此关到控制器,用于特定的形式,那么谁可以决定怎么做你所需要的操作。

我认为这是有风险的都这个逻辑在一个控制器,因为这将意味着一个很长的switch语句,在某些时候。

你可能想解释一下您是如何从控制器的JavaScript(客户端)处理输入,以确定路由,因为,目前,这只是猜测就如何帮助你。

+0

现在我有控制器从/ page/action/query中的url中获取它的命令。除了像4年前的html锚点之外,我还没有使用过#,但这听起来像个好主意。截至目前,我没有一个处理javascript的控制器,这是我的问题。我使用Ajax调用来处理哪个可以具有逻辑,或者通过为每个表单创建一个控制器来自动加载我需要的控制器(因为我最终会有很多表单)。这两者都没有吸引我。如果我可以用#来传递它,太好了。 – NeoTubNinja 2009-10-17 18:16:33

+0

使用href是一个不错的选择,因为您可以告诉控制器哪个窗体以及哪个命令。行动= “Controller.php这样/表格名称/命令名”。然后你的控制器会得到需要的部分,或许可以用'/'分割URL,以确定发送请求的位置。 – 2009-10-17 18:23:08

1

你在说;

截至目前我没有 控制器处理JavaScript这 是我的问题

据我了解你的控制器不需要控制器处理Ajax请求。您可以像正常请求那样创建ajax请求。所以如果你的控制器知道如何处理正常的请求,它已经处理的JavaScript。

再次,如果我正确理解书籍的例子,你应该做这样的事情;

$.get("/books/search/plato", function(data){ 
    alert("Data Loaded: " + data); 
}); 

而对于/操场和梯度的事情,这应该工作;你可以从handle.php调用它,它会请求游乐场控制器并返回数据;

$.get("/playground/gradient", function(data){ //data is what is returned from playground file 
    alert("Data Loaded: " + data); 
}); 

希望这有助于