1

我试图从 2 小时内解决这个问题,但没有运气,也许这不是技术性的,但我需要帮助!

我有一个 AJAX 脚本,需要将 GET 请求发送到同一页面上的 php 脚本。PHP脚本像这样终止

      if ($success) {
        print( $state );
      }?>

Javascript 正好在 php 终止下,就是这样。

<script>
  $('table button').click( function() {
    var button = $(this);
    /* if button inside the table is clicked */
    var username = button.parent().parent().children('td').html();
    var state = button.html();

    /* send GET request */
    $.ajax({
      type: "GET",
      url: 'index.php',
      data: 'username='+username+'&state='+state,
      success: function(response) {
        alert(response);
      }
    });
  });
</script>

我不明白为什么我会收到包含此文本的警报

inside // this is the state, so it's good
<script> // this is the script, not good
  $('table button').click( function() {
    var button = $(this);
    /* if button inside the table is clicked */
    var username = button.parent().parent().children('td').html();
    var state = button.html();

    /* send GET request */
    $.ajax({
      type: "GET",
      url: 'index.php',
      data: 'username='+username+'&state='+state,
      success: function(response) {
        alert(response);
      }
    });
  });
</script>

由于我从我的 php 代码中得到的混乱响应,我无法成功地操作 HTML。我不确定我是否必须发布其他代码。如果您需要了解更多信息,请询问,我会尽快回复。

4

2 回答 2

4

标签之外的任何字符都会<?php ?>在响应中发回。当您从浏览器访问 index.php 时,这就是您首先获取该<script>标签的方式。

echo 和 print 显然也会发送数据。

所以我猜你应该if($success)在 index.php 的开头和exit;里面,在print.

出于历史和实际原因,标签之外的字符<?php ?>作为响应的一部分发送。在我们这个时代,将 PHP 代码与 HTML 混合是一种不好的做法(正如一些人已经在下面的评论中指出的那样)。您要么使用模板引擎(大多数人都知道 Smarty),要么使用 PHP 本身作为模板引擎。但是“过去”的 PHP 最初只是一个简单的模板引擎(没有类、外部模块、命名空间、自动加载器等),因此将 HTML 与 PHP 混合基本上是这种语言的目的。正如我所说,今天我们仍然使用 PHP 作为模板语言,因此混合 PHP(控制结构、循环)和 HTML 是可行的。

于 2013-08-24T14:29:02.030 回答
2

一个快速但不推荐的解决方法是避免 ajax 请求中的 javascript 内容

只是演示一下,怎么可能,

if($success) {
    print( $state );
  }

if(!isset($_GET['ajax_call']))
{ ?>
  <script>
  $('table button').click( function() {
  var button = $(this);
  /* if button inside the table is clicked */
  var username = button.parent().parent().children('td').html();
  var state = button.html();

/* send GET request */
$.ajax({
  type: "GET",
  url: 'index.php?ajax_call=1',
  data: 'username='+username+'&state='+state,
  success: function(response) {
    alert(response);
  }
});
});
  </script>
<?php
}?>

......

你应该注意到新的 ajax 调用有一个额外的变量 ajax_call,

这是一个快速修复,让您继续前进,但我建议您使用 MVC 框架。

于 2013-08-24T15:11:42.483 回答