我正试图在两个小时内解决这个问题,但运气不好,也许这不是技术问题,但我需要帮助!
我有一个AJAX脚本,它需要向同一页面上的php脚本发送GET请求。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>
我必须在成功时操作HTML,因为我无法做到这一点,因为我从php代码中得到了混乱的响应。我不确定是否必须发布其他代码。如果你需要了解更多,只需询问,我会尽快回复。
<?php ?>
标记之外的任何字符都会在响应中返回。当您从浏览器访问index.php时,首先就是这样获得<script>
标记的。
echo和print显然也会发送数据。
所以我想你应该在index.php的开头有if($success)
,在print
之后有exit;
。
由于历史和实际原因,<?php ?>
标签之外的字符被作为响应的一部分发送。在我们的时代,将PHP代码与HTML混合是一种糟糕的做法(正如一些人在下面的评论中已经指出的那样)。您可以使用模板引擎(大多数人都知道Smarty),也可以使用PHP本身作为模板引擎。但"在过去",PHP最初只是一个简单的模板引擎(没有类、外部模块、名称空间、自动加载器等),所以将HTML与PHP混合基本上就是这种语言的目的。正如我所说,今天我们仍然使用PHP作为模板语言,因此混合使用PHP(控制结构、循环)和HTML是可行的。
一个快速但不推荐的解决方案是避免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框架。