Ajax到PHP在同一页面上

时间:2015-03-14 16:50:08

标签: php jquery ajax

我正在尝试将变量发送到进行AJAX调用的同一页面。

只有在我分离PHP脚本(例如process.php并相应地更改AJAX url)时才会收到成功的结果。

index.php

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
    $(function() { 
        $('form').submit(function(e) { 
            e.preventDefault();
            $.ajax({
                type        : 'POST',
                url         : 'index.php',
                data        : $(this).serialize(),
                dataType    : 'json',
                encode      : true
            })
            .done(function(data) {
                $('#result').html(data);    
            })
        });
    }); 
</script>
</head>

<body>
<?php
    $data = array();
    if(isset($_POST['name'])) {
        $data = 'You entered: ' . $_POST['name'];       
        echo json_encode($data);        
    }
?>
    <form>
        <input type="text" name="name">
        <input type="submit" value="Submit">
    </form>

    <div id="result"></div>
</body>

同一页面是否可以捕获和处理我们使用AJAX传递的变量?

2 个答案:

答案 0 :(得分:4)

您在AJAX设置中设置了dataType : json,因此您应该echo一个json object而不是字符串(HTML)。
使用exit()代替{ {1}},并将您的PHP放在页面的顶部。因此,在检查echo是否存在之前,不会回显任何HTML。

另一件事是您的$_POST['name']在该行上转换为字符串:

$data = array()

应为$data = 'You entered:' . $_POST['name'];

$data[] = ...

答案 1 :(得分:0)

添加die();函数和使用$ _SERVER ['HTTP_X_REQUESTED_WITH']来检测ajax请求。 alos将serialize()放在ajax函数的一边以获取数据

   var data = '';
   $(function() { 
    $('form').submit(function(e) { 
        e.preventDefault();
        data = $(this).serialize();
        $.ajax({
            type        : 'POST',
            url         : 'index.php',
            data        :  data,
            dataType    : 'json',
            encode      : true
        })
        .done(function(data) {
            $('#result').html(data);    
        })
    });
}); 


<?php

  $data = array();
  if(isset($_POST['name']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {
    $data = 'You entered: ' . $_POST['name'];       
    echo json_encode($data);  
    die();      
  }
?>