2012-07-14 102 views
0

我最近试图将我的网站变得更加有活力。它主要基于PHP,我试图寻找页面动态改变与Ajax。 但是,我偶然发现了通过ajax加载php循环的问题。 我看了一个脚本制作动态网页可能:http://www.queness.com/post/328/a-simple-ajax-driven-website-with-jqueryphp使用ajax进行动态内容时PHP循环无法正常工作

switch($_GET['page']) { 
case 'page1' : $page = 'Page 1'; 
       break; 
case 'page2' : $page = 'Page 2'; 
       break; 
case 'page3' : $page = 'Page 3'; 
       break; 
case 'page4' : $page = 'Page 4'; 
       break; 
} 
echo $page; 

例如,如果你改变

case 'page1' : $page = 'Page 1'; 

成一个圈

case 'page1' : for ($i=0;$i<2;$i++){$page .= $i;}; 

它只是不做任何事情。有任何想法吗? :)

编辑:我期待它输出什么给定的循环正常输出。处理这件事似乎有某种冲突。没有循环的发布代码按预期工作,但是当你启用php循环时,它将不起作用。编辑2:我已经指出问题是循环,所以我不认为有必要展示我使用的代码。作为一个例子,我只是把一个简单的循环。代码基本上是循环访问数据库中的数据并输出它们。如果有人能指出为什么这不起作用以及是否有解决方法,我很乐意。 :P

+0

作为循环的结果,你期待什么? – ninetwozero 2012-07-14 00:13:41

+0

你正在尝试使用这个循环的实际代码是什么? (注意'$ page'最初是不确定的) – 2012-07-14 00:31:09

+0

尝试在for循环之后丢弃分号,卷曲支撑的代码块和错误的分号放置会导致奇怪的结果 – 2012-07-14 00:41:12

回答

0

我不相信你可以使用for循环作为case语句的值。请参阅下面的结果:

http://ideone.com/GXXMs

没有看到你真正的代码,并知道你真正的目标,我的最好的建议是你的预处理循环进入该switch语句之前

+0

这不是OP正在做的事情。循环在案件的主体中,这很好。 – 2012-07-14 00:35:11

+0

也许我误解了......但基本上我拿了他的实际代码并替换了他所说的替换。语法错误。 – 2012-07-14 00:37:59

+0

语法错误在循环中; $ i = 0; $ i <2;i++ --> $ i = 0; $ i <2; $ i ++ – kinetiks 2012-07-14 00:42:48

0

也许这个问题不会试图在PHP的情况下执行循环。

看来您正在使用$ _GET ['page']调用来从QueryString中获取值。如果您在URL语法中定义了“页面”(例如:foo.php?page = page1),这将起作用。在这个例子中,你永远不会在查询字符串中定义名为“page”的变量,而是只在URL的末尾抛出#page1。这意味着您的switch语句中没有任何情况正在执行,因为它们与$ _GET返回的空值不匹配。

尝试解析查询字符串以获取“#”后的任何内容到您在case语句中使用的参数中。

+0

我不明白。如果是这种情况,那么在向其中引入循环之前,代码不应该在第一位工作。 – kinetiks 2012-07-14 00:52:05

0

使用regular expression replace

echo preg_replace('/page([0-9]+)/i', 'Page $1', $_GET['page']); 

原因case 'page1' : for ($i=0;$i<2;$i++){$page .= $i;};什么也不做是$page为空。尝试

case 'page1' : $page = 'page'; for ($i=0;$i<2;$i++){$page .= $i;}; 
0

当我把你圈成一个函数:

功能testthis()
{
为($ i = 0; $ I < 2; $ I ++){$页。= $ i;};当我宣布$页的循环之外

- 只是把行
}

它抛出一个错误:“页面demo.php注意:未定义的变量”:$页=“”;它的工作原理 - 没有错误。

所以 - 我的建议 - 在循环外声明$页面并将其设置为空字符串“”。看看是否解决了这个问题。

根本原因似乎是您将一个字符串连接到尚未声明的变量。