【问题标题】:php file not working from ajax callphp文件在ajax调用中不起作用
【发布时间】:2013-11-20 23:08:47
【问题描述】:

我有以下 ajax 函数,该函数从一个表单按钮调用,该按钮获取下面 php 循环中使用的数字。 php 文件加载,但代码在“带红色星号 * 的字段是必需的”之后停止工作 任何帮助都会很棒!

    function loadMulti() {
        var num_to_enter = $('#num_to_enter').val();
        $.ajax({
          type: "POST",
          url: "myphpfile.php",
          data: "num_to_enter=" + num_to_enter,
          success: function(){
        $("#multi").load('myphpfile.php')
          }
       });
        return false;
          }

和 php :

<?php
$num_to_enter = $_POST["num_to_enter"];
echo $num_to_enter;
$i=1;
?>

<form class="my_form" name="addReg" id="addReg" method="post" />


            <span class="red">Fields With Red Asterisks * Are Required</span>



<?php
    while($i <= $num_to_enter){
?>
    The html form here repeated by $num_to_enter
<?php
  $i++;
}
?>

【问题讨论】:

  • 您的 HTML 无效,&lt;form&gt; 不会自动关闭。你永远不会在你的 PHP 文件中更新$i,所以它可能最终会进入一个永无止境的循环。
  • 您知道在 $("#multi").load(myphpfile.php') 处缺少单引号吗?应该是 $("#multi").load('myphpfile.php')。
  • 嗯,它在组织代码中,对不起,这里有错别字

标签: php ajax


【解决方案1】:

对于初学者,您可以稍微清理一下您的代码。看看这是否有帮助(经过测试和工作)

JS 文件

function loadMulti () 
{
    var num_to_enter = 2;//$('#num_to_enter').val();
    $.ajax({
        type: "POST",
        url: "temp.php",
        data: "num_to_enter=" + num_to_enter,
    }).done (function (data){  //success is deprecated
        $("#test").html (data);
    });
    return false;
 }

$(document).ready (function (){
    loadMulti ();
});

或者也许你想要一个 js 帖子??

function loadMulti () 
{
    var num_to_enter = 2;//$('#num_to_enter').val();

    $ ("#check").on ("click", function (){
        $.ajax({
            type: "POST",
            url: "temp.php",
            data: "num_to_enter=" + num_to_enter,
        }).done (function (data){  //success is deprecated
            $("#test").html (data);
        });
    });
    return false;
 }

$(document).ready (function (){
    loadMulti ();
});

PHP 文件

<?php
  $num_to_enter = $_POST["num_to_enter"];
  $string = "";
  echo $num_to_enter;
  $i=1;

  while ($i <= $num_to_enter)
  {
        $string .= "The html form here repeated by {$num_to_enter}<br/>";
        $i++;
  }
?>


  <span class="red">Fields With Red Asterisks * Are Required</span>
  <?php echo $string; ?>

进行调用的 PHP 文件。

<!doctype html>
 <html>
  <head>
   <title></title>
   <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
   <script src='test.js'></script>
  </head>

  <body>
    <div id="test">test</div>
  </body>   
 </html>

或与帖子一起

<!doctype html>
 <html>
  <head>
   <title></title>
   <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
   <script src='test.js'></script>
  </head>


  <body>
    <div id="test">results will show here.</div>
    <form class="my_form" name="addReg" id="addReg" method="post" />
        <input id="check" type="button" name="sendpost" value="Get Data">
    </form>
  </body>   
 </html>

编辑: 添加了进行调用的 php 文件,我将 .load () 更改为 .html () 及其受人尊敬的选择器。

另外我不确定你是否希望消息打印不止一次,所以如果你需要以这种方式打印,只需将 $string 更改为数组。

【讨论】:

  • xlordt 我将代码更改为您的建议,现在 php 文件根本无法加载????我什至从 $("#multi").load(myphpfile.php'); 中删除了注释
  • 另外,为了回答您的问题,html 表单会按用户选择的数字重复 - $num_to_enter
  • 我应该补充一点,我添加了一个警报,变量 num_to_enter 在那里,我在 php 文件中有它的回显,但是当文件加载时它没有回显它。如果我添加一个 die 语句并在没有 ajax 的情况下直接转到 php 文件,它确实会通过并打印表单。通过ajax加载时似乎只有php不起作用。还有其他想法吗??????
  • 你用firebug检查了吗?
  • 我不知道该怎么做,对不起!
【解决方案2】:

您的 PHP 脚本“运行良好”,但您最终会进入一个没有尽头的 while 循环,因为您从未更新 $i。您需要在while 循环中增加它:

<?php
    $num_to_enter = $_POST["num_to_enter"];
    echo $num_to_enter;
    $i = 1; 
?>

<form class="my_form" name="addReg" id="addReg" method="post" />

<span class="red">Fields With Red Asterisks * Are Required</span>



<?php
    while ($i <= $num_to_enter) { 

       ?>The html form here repeated by $num_to_enter <?php

       // You need to increment this so the while loop stops when $i hits 
       // the same amount as $num_to_enter.
       $i++; 
    }
?>

【讨论】:

    【解决方案3】:

    改变这个:

    data: "num_to_enter=" + num_to_enter,
    

    到这里:

    data: {num_to_enter: num_to_enter},
    

    $.ajax() expects an object, not a string。文档确实说它可以接受一个字符串,但是在那种情况下你必须自己序列化它;让 jQuery 处理会更容易。

    关于 PHP:确保在你的 while 循环中增加 $i,否则它永远不会结束,正如 @putvande 指出的那样,并确保你包含一个结束 &lt;/form&gt; 标记。

    最后,将这个:$num_to_enter = $_POST["num_to_enter"]; 更改为这个:$num_to_enter = intval($_POST["num_to_enter"]); 以强制 PHP 将其视为整数。

    【讨论】:

    • 那不是真的,它既可以是字符串也可以是对象。
    • 查看我的编辑。看起来 jQuery 很容易在那里正确处理字符串,this question 中也证明了这一点。
    • 我刚才测试了data: "num_to_enter=" + num_to_enter,效果很好。
    • 我将 data: "num_to_enter=" + num_to_enter, 更改为:data: {num_to_enter: num_to_enter},并确保上面编辑的表单标签已关闭,但仍然得到相同的结果
    猜你喜欢
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2016-04-18
    • 2012-11-26
    相关资源
    最近更新 更多