2013-03-02 77 views
0

我使用ajax加载显示基于屏幕分辨率的内容的php脚本。该脚本效果很好,但是ajax调用的url也在后面的脚本中调用 - 它包含所有处理信息。所以,结果是所有内容都通过jquery加载,然后用php复制。例如:javascript include_once- javascript php调用相同的文件复制内容

<script type="text/javascript"> 
$(document).ready(function() { 
     $.ajax({ 
     url: 'functions/maxresults.php', 
     type: 'GET', 
     data: {h: screen.height, w: screen.width} 
     }).done(function (data) { 
      alert("I am working!"); 
     document.getElementById("container").innerHTML=data; 
     }); 
    }); 
</script> 

进一步回落

<?php 
include_once("functions/maxresults.php"); 
?> 

<?php 
require_once("databasefunctions.php"); 
?> 

<div id="container"> 
<div id="movieinfo"> 
<?php include("sidebar.php");?> 
<?php 
// get the function 
include_once ('function.php'); 
if($_GET['page']) 
$page = $_GET['page']; 
else 
$page = 0; 
$maxresults = -1; 
if(($_GET['w']) && ($_GET['h'])) { 
    $w = $_GET['w']; 
    $h = $_GET['h']; 
} 
    if ($w == 1920) { 
    $maxresults = 24; 
    } else if ($w == 1600) { 
    $maxresults = 21; 
    } else if ($w == 1440){ 
    $maxresults = 14; 
    } else if ($w == 1366) { 
    $maxresults = 21; 
    } else if ($w == 1024) { 
    $maxresults = 8; 
    } else 
    $maxresults = 6; 
echo $maxresults; 
$currentpage = $page; 
$page = $page*$maxresults; 
$numpages = QuickQuery("SELECT COUNT(id) FROM movies WHERE visible=1"); 
$numpages = mysql_result($numpages, 0); 
$numpages = $numpages/$maxresults-1; 
$result = GetMoviesByRangeID($page, $maxresults);//Show <maxresults> pages at a time 
DisplayResults($result); 
?> 
</div> 
</div> 

我无法取出PHP包括或脚本将无法工作。会在jQuery工作中创建include_once,如果是这样,我该如何编码?

+2

这是错误的做法(因为好一个简单_not_包括代码两次),但你可以有一个JavaScript全局变量WAS_INCLUDED =在PHP代码,你有真正的,然后有JavaSript检查变量只有在没有的情况下才被定义并执行代码。另一方面,你可以发送一个GET参数从js到php。 – 2013-03-02 16:50:08

+0

@Benjamin如果你有时间可以给我看一个例子吗? – JJM 2013-03-02 16:54:00

+0

虽然我觉得告诉你如何实现它是公平的,但我不能给你这种方法作为答案。我诚实的回答是你需要重新考虑你的设计。在精心设计的网页设计中,这种情况不应该发生。你为什么面对这个问题?为什么相同的JavaScript代码包含两次?为什么它不在一个单独的.js文件中?你的模板是否经过深思熟虑? – 2013-03-02 16:56:46

回答

0

PHP是一个预处理器。所以,你在文件后面加入它并不重要。您的include_once将在执行JavaScript之前处理和输出。

我看起来像问题是,你的include_once脚本也输出容器div。所以,当你删除该行时,它会打破javascript。试试这个:

  1. 从您的maxresults.php文件中删除容器div。
  2. 与空div更换<?php include_once('functions/maxresults.php);>与容器的标识:<div id="container"></div>

你的JavaScript应现在的工作:

<script type="text/javascript"> 
$(document).ready(function() { 
    $.ajax({ 
    url: 'functions/maxresults.php', 
    type: 'GET', 
    data: {h: screen.height, w: screen.width} 
    }).done(function(resp) { 
     alert("I am working!"); 
     $("#container").html(resp); 
    }); 
}); 
</script> 

进一步回落

<div =id="container"></div> 

的maxResults .php

<?php 
require_once("databasefunctions.php"); 
?> 

<div id="movieinfo"> 
<?php include("sidebar.php");?> 
<?php 
// get the function 
include_once ('function.php'); 
if($_GET['page']) 
$page = $_GET['page']; 
else 
$page = 0; 
$maxresults = -1; 
if(($_GET['w']) && ($_GET['h'])) { 
    $w = $_GET['w']; 
    $h = $_GET['h']; 
} 
    if ($w == 1920) { 
    $maxresults = 24; 
    } else if ($w == 1600) { 
    $maxresults = 21; 
    } else if ($w == 1440){ 
    $maxresults = 14; 
    } else if ($w == 1366) { 
    $maxresults = 21; 
    } else if ($w == 1024) { 
    $maxresults = 8; 
    } else 
    $maxresults = 6; 
echo $maxresults; 
$currentpage = $page; 
$page = $page*$maxresults; 
$numpages = QuickQuery("SELECT COUNT(id) FROM movies WHERE visible=1"); 
$numpages = mysql_result($numpages, 0); 
$numpages = $numpages/$maxresults-1; 
$result = GetMoviesByRangeID($page, $maxresults);//Show <maxresults> pages at a time 
DisplayResults($result); 
?> 
</div> 
+0

正在输出正确的尺寸 - 问题是“容器”中的所有内容都被复制;首先由php显示(如你所阐明的),然后由javascript显示。 – JJM 2013-03-02 17:10:47

+0

maxresults的输出是什么?它创建容器元素吗? – markle976 2013-03-02 17:15:23

+0

是的,maxresults正在创建容器元素和 – JJM 2013-03-02 17:17:28