2013-03-02 2 views
0

Я использую ajax для загрузки php-скрипта, который отображает контент на основе разрешения экрана. Сценарий отлично работает, но URL-адрес, который вызовы ajax также вызывается позже в скрипте, содержит всю информацию о обработке. Таким образом, в результате все содержимое загружается через 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 включить или скрипт не будет работать. Будет ли создание include_once в работе jquery, и если да, то как это сделать?

+2

Это неправильный подход (так как хорошее одно просто _not_ включая код дважды), но вы можете иметь яваскрипт глобальную переменную WAS_INCLUDED = истину в коде PHP вы включаете и затем Javasript проверить, если этому переменный определяется и выполняет код только в том случае, если это не так. С другой стороны вы можете отправить параметр GET из js в php. –

+0

@ Беньямин, если у вас есть время, вы можете показать мне пример? – JJM

+0

Хотя я чувствую, что было бы справедливо рассказать вам, как вы могли его реализовать, я не могу дать вам этот метод в качестве ответа. Мой честный ответ - это то, что вам нужно переосмыслить свой дизайн. нет никакого способа, чтобы такой сценарий происходил в хорошо продуманном веб-дизайне. Почему вы столкнулись с этой проблемой? Почему один и тот же код JavaScript включен дважды? Почему это не в отдельном файле .js? Является ли ваш шаблон хорошо продуманным? –

ответ

0

PHP - препроцессор. Таким образом, не имеет значения, что вы включаете его «позже» в файл. Ваш include_once будет обрабатываться и выводиться до запуска JavaScript.

Похоже, проблема заключается в том, что ваш скрипт include_once также выводит контейнер div. Итак, когда вы удаляете эту строку, она разбивает javascript. Попробуйте это вместо:

  1. Удалить контейнер div из файла maxresults.php.
  2. Заменить <?php include_once('functions/maxresults.php);> с пустой DIV с идентификатором контейнера: <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

+0

Что именно выводит максимальный результат? это создание элемента контейнера? – markle976

+0

да, maxresults создает элемент контейнера и все div/содержимое внутри – JJM

Смежные вопросы