我的ajax电话后,帖子怎么会出现空白?

时间:2014-01-26 23:46:12

标签: php jquery ajax post redirect

我有一个ajax电话:

function change(x){
    var id=x;
    alert(id);
    $.ajax({
        url: "http://localhost/kidsKnitsDB/edit.php",
        type: "post",
        data: JSON.stringify(id),
        beforeSend: function(response){alert('Sending');},
            success: function(response){ alert('success');},
            error: function(response){alert('failed');},
            complete: function(response){window.location="http://localhost/kidsKnitsDB/edit.php";},
    });
}

从中获取数据:

<?php for($r=0; $r<count($result); $r++){?>
    <tr>
        <?php for($c=0; $c<9; $c++){?>
            <td><?php echo $result[$r][$c];?></td>
        <?php }?>
        <td><button name="edit<?php echo $r;?>" onclick="change(<?php echo $result[$r][0];?>)">edit</button></td>
    </tr>
<?php }?>

它应该发布到:

<?php 
    $db= new PDO("mysql:host=example;dbname=example", "root", "example");
    $id=$_POST['id'];
    $query= $db->prepare("SELECT * FROM table WHERE Id = :parameter");
    $query->bindParam(':parameter', $id, PDO::PARAM_STR);
    $query->execute();
    $result=$query->fetch();
    $name=$result['Name'];
?>
<script type="text/javascript">alert(<?php echo $id;?>);</script>
<h1>Edit for <?php echo $name;?></h1>
</br>
<form id="editForm" action="sucess.php" method="POST">
    <lable>sale price</lable>
    <input type="number" id="salePrice" name="salePrice">
    </br>
    <lable>cost</lable>
    <input type="number" id="cost" name="cost">
    </br>
    <lable>contents</lable>
    <input type="text" id="contents" name="contents">
    </br>
    <lable>on sale</lable>
    <input type="checkbox" id="onSale" name="onSale">
    </br>
    <lable>image</lable>
    <input type="image" id="image" name="image">
    </br>
    <lable>active</lable>
    <input type="checkbox" id="active" name="active">
    </br>
</form>

然而,$ id是空白的,我相信这是因为某种方式的ajax调用,但我不确定。如果有人能提供帮助,那就太好了。

1 个答案:

答案 0 :(得分:1)

第一个问题

你只是发送一个数字,而不是一个对象,所以php代码不知道你称之为id。

更改

function change(x){
  var id=x;

function change(x){
  var id={id:x};

第二个问题

使用这段代码:

complete: function(response){window.location="http://localhost/kidsKnitsDB/edit.php";}

在ajax调用完成后进行重定向。

这就是:

  1. 第一个ajax-request被发送到服务器。由于你修复了第一个问题,它现在得到名为id的变量后的数字。
  2. 服务器生成页面并将其作为对ajax-call的回复。
  3. 当ajax-call完成后,你会手动重定向到你刚发送ajax-request的同一页面,但是你没有提供任何变量。
  4. 浏览器加载页面,但由于请求中没有给出id,因此id为空。
  5. 从你的日志文件中你可以看到它发出两个请求,第一个带有id,第二个带有任何变量:

    [Sun Jan 26 19:08:29 2014] Array\n(\n [id] => 2\n)\n
    [Sun Jan 26 19:08:30 2014] Array\n(\n)\n
    

    我认为在这种情况下,AJAX调用使得它比需要的更复杂。链接到http://localhost/kidsKnitsDB/edit.php?id=x更简单,其中x是数字。然后你应该在PHP代码中将$ _POST更改为$ _GET。

    如果您仍想使用AJAX,您应该在页面的某个位置插入从请求中获得的响应,而不是像现在那样进行重定向。