2

我希望 HTML 页面上的表单在发送时不刷新,我已经完成了,但我还希望允许echoPHP 文件中的命令能够从 HTML 文件中调用 JavaScript。

到目前为止,所有echo命令都没有被执行,这不是我所期望的。

以下是 HTML 和 PHP 文件中的一些代码:

HTML:

<script type="text/javascript">

function functionInFile() {
    alert("recieved");
}

    $(function() {  
      $(".postform").submit(function() {  
      var content = $(this).serialize();

      $.post('signup.php?', content);

      return false;

      });  
    });     

</script>

和 PHP:

echo '<script type=\'text/javascript\'>functionInFile()</script>';

所以基本上,我希望 PHP 文件能够调用 HTML 文件中的函数,而在单击提交时不会被重定向。

任何帮助表示赞赏。

4

3 回答 3

3

您可以使用成功回调$.post()来执行 PHP 传回的函数。试试这个:

PHP

// do some stuff with the posted data
echo 'functionInFile'; // name of js function to execute in calling page

jQuery

function functionInFile() {
    alert("recieved");
}

$(function() {  
    $(".postform").submit(function() {  
        $.post(
            'signup.php?', 
            $(this).serialize(),
            function(func) {
                window[func]();
            },
            'text'
        );
        return false;
    });  
});
于 2012-04-27T11:06:26.277 回答
1

使用回调函数可能会更好post

jQuery.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

因此,您将执行回复或预先确定的登录中的任何代码onsusccess

$.post( 'signup.php?', content,
      function( data ) {
          //data contains the reply of the post so you can 
          //exec the code like this using JavaScript
          //altogether eval is frowned upon because it is high overhead and opens
          //opens up to code injection or whatever
         //eval(data);
         //so you just execute whatever method you need
         functionInFile();
        //or you reply from server in json and converto tobject
        //reply: {'executeFunction': true}
       var obj = jQuery.parseJSON(data);
       if (data.executeFunction == true) { functionInFile(); }

      }
    );

解析JSON

为了使 PHP 回显工作。该页面必须重新加载,因为它是服务器端。

一个网页循环是服务器端,然后是客户端。

[服务器] -> [客户端 -> AJAX 到服务器 -> 服务器回复附件]

于 2012-04-27T11:13:13.593 回答
0

看起来您发送的是正确的<script>标签。XHR 返回值被视为数据,而不是可执行代码。幸运的是,jQuery 有代码来检查你是否<script>在 dom 中插入标签并执行它。你应该能够做到:

$.post('signup.php?', content, function(html) {$(document).append(html);});

你的脚本将执行。

(不过,我建议以不同的方式实现这一点。我曾开发过在 AJAX 调用中发回大部分 javascript 的应用程序,调试起来很痛苦。最好用一个 JSON 对象发回下一个操作的字符串,然后将“已批准”操作的对象保留为字符串 -> 函数查找表。)

于 2012-04-27T11:20:16.927 回答