2012-12-19 71 views
2

夫妻问题:PHP和JQuery:值不更新

1)我试图有一个新的随机值每次按下按钮时更新。点击按钮后,会生成一次值...但不是随机的。所以我不确定函数是否在点击时被再次调用,因为没有生成新的值。

2)当使用服务器调用(如$ .get())并将其作为一个函数在同一个文件中调用时,是否可以将php代码包含在与jquery相同的文件中?

原因是,我不希望不得不继续创建新的PHP脚本文件,而宁可将代码放在与调用jquery相同的文件中。

含义......

而不是$.get("../scripts/NameGenerator2.php",

我这样做:$.get("a php function within this same file",

JQuery的:

<?php 
    if ($imgid == 1) { 
?> 
<button onclick="generate()">Generate</button> 

<button id="generateButton">Generate</button> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#generateButton").click(function(e) { 
      //alert("called"); 
      $.get("../scripts/NameGenerator2.php", 
       function(returned_data) { 
        $("#generated").html(returned_data); 
       } 
      ).error(function(jqXHR, status, error) { 
       console.log("error in $.get") 
      }); 
     }); 
    }); 
</script>  
<?php } ?> 
<br /><span id="generated"></span><br /> 

PHP:

<?php 
$adj = array("Happy", "Great", "Mandarin", "New", "Golden", "Ming's"); 
$noun = array("Dragon", "Sea", "Wok", "Fortune", "Rice", "Empire"); 
$place = array("Garden", "China", "Village", "Palace", "Kitchen", "Mountain"); 


$x = rand(0, count($adj)-1); 
$y = rand(0, count($noun)-1); 
$z = rand(0, count($place)-1); 

echo '<p>' . $adj[$x] . " " . $noun[$y] . " " . $place[$z] . '</p>'; 

?> 

有什么想法?谢谢!

更新:只有错误我似乎得到的是“预期的对象”在我的“myJquery.js”的文件,这是不是我在工作中的文件,似乎并不相连。

enter image description here

当我在准备文件添加到我的功能,按钮的onclick()调用似乎打破。

enter image description here

+0

我更新了我的答案,但是您的所有jQuery函数都需要在文档就绪处理程序中。文档就绪处理程序中没有功能。 –

+0

@JayBlanchard我认为这个处理程序是可选的,或者你可以有多个它的实例。 – Growler

+0

只有当jQuery接近页面底部以确保在调用jQuery代码之前存在DOM元素时,它才是可选的。你可以有多个实例,但你没有。 –

回答

1

你不能让一个PHP函数,但你可以加载页面,并获得特定的div -

$('#generated').load('../scripts/NameGenerator2.php #pagePart'); 

你回声出PHP与正确的ID在的地方,例如 -

echo '<p id="pagePart">' . $adj[$x] . " " . $noun[$x] . " " . $place[$x] . '</p>'; 

没有使用任何内嵌JavaScript,这是你的jQuery代码可能看起来像什么 -

<button id="generate">Generate</button> 

$(document).ready(function() { 
    $('#generate').click(function(e){ 
     e.preventDefault(); 
     $('#generated').load('../scripts/NameGenerator2.php #pagePart'); 
    }); 
}); 

根据您的更新,您需要将所有jQuery函数移动到文档就绪函数中。

3

你可以用jQuery调用.php文件。但该文件应该可以通过浏览器访问,并且应该返回合格的数据。

随着.get()可以定义预期的数据类型。它可以是xml,json,script或html。 如果你想使用json(我的最爱)使用php函数json_encode来产生输出。

如果你想使用相同的文件,创建一个GET参数例如?AJAX = 1。用您的AJAX请求调用该文件并附加GET参数。然后在.php文件中,您可以在普通调用和返回其他输出的ajax调用之间切换。

<?php 
    if (!empty($_GET) && !empty($_GET['ajax']) && $_GET['ajax'] == 1) { 
     // header("Content-type: application/json"); 
     // $data = array(some_data); 
     // echo json_encode($data); 
     echo 'AJAX-call-output'; 
    } else { 
?> 
     <!-- [...] --> 
     <script type="text/javascript"> 
      function generate() {  
       $.get("../scripts/NameGenerator2.php", 
        { ajax: 1 }, // GET-Parameter 
        function(returned_data) { 
         //alert("test"); 
         $("#generated").html(returned_data); 
        } 
        //, "json" 
       ); 
      } 
     </script> 
     <!-- [...] --> 
<?php 
    } 
?> 
+0

我知道你在说什么。你能否提供一个快速的例子? – Growler

+0

我更新了我的答案;) – algorhythm