2

我到处搜索,但找不到如何通过 js/jquery/ajax 刷新特定的输入字段。

这是我在每篇文章中都会更改的输入:

<input type='hidden' id='nonce' name='nonce' value=''>
<input type='hidden' id='key' name='key' value=''>

我需要在提交 ajax 表单后刷新这些输入,知道吗?

更好的解释:这个 php 代码生成随机散列键。

<form action="#">

<?php $n->generateFormFields() ?>

</form>

我通过ajax POST发送这个生成的密钥,问题是当我将代码发送到ajax时,服务器端的密钥发生了变化,所以下次提交后密钥会出错,因为它在ajax响应后没有改变,所以我需要在 ajax 提交/刷新上面的输入后刷新此代码。

编辑 2:

我正在使用这个 php 脚本:

http://github.com/greatwitenorth/php-nonce

该脚本正在使用 php POST,但我使用的是 AJAX 帖子,所以我需要以某种方式使用 ajax 刷新密钥。

编辑3:

形式例如:

<form action="#">

<?php $n->generateFormFields() ?>

</form>

上面的 php 函数是创建散列键。我通过 ajax json POST 发送的这些散列密钥,在我发送它们之后,我验证密钥与数据库密钥相同。- 如果可以继续,如果不显示错误。现在的问题是每次提交表单时关键更改。所以它改变了,但在表单的输入中,它没有改变,因为 ajax 没有刷新页面,所以它将发送与以前相同的键值。

4

2 回答 2

1

.html 文件

<!DOCTYPE html>

<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
 $(document).ready(function(){
    $("#check").click(function(){
        $("#keyvalue").text($("#key").val());
    });
    $("#submit").click(function(){
    var text = $("#text").val();
    var key = $("#key").val();
        $.ajax({
            url: 'trial.php',
            data: {text: text, key:key},
            type: 'POST',
            dataType: 'json',
            success: function(data) {
                if(data.status == "fail"){
                    $("#status").html(data.message);
                }else{
                    $("#status").html(data.message);
                    $("#key").val(data.key);
                    $("#keyvalue").text('');
                }
            }
        });
        return false;
    });
 });
</script>
</head>
<body>
    <form method="post" action="trial.php" onsubmit="return send_form();">
        <input type="text" name="text" id="text"/>
        <input type="hidden" id="key" name="key" value="xsaigoehf7118191"/>
        <button id="submit">Send data and get new key</button>
    </form>
    <br><br>
    <div id="status"></div>
    <br><br>
    <button id="check">What's current value of key?</button> --------> <span id="keyvalue"></span>

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

</html>

.php

<?php

//You get the form contents here.

$key = isset($_POST['key']) ? $_POST['key'] : "error";
$text = isset($_POST['text']) ? $_POST['text'] : "empty";

//Check them if it matches with DB's entry, if doesn't you set $key = "error";

if($key=="error"){
    $status = "fail";
    $message = "There was some error processing your form.";
    exit;
} else{

    //You generate another random key.
    $random ='';
    for ($i = 0; $i < 10; $i++) {
        $random .= chr(mt_rand(33, 126));
    }

    //Now here in steps save it to your DB. So that when next form is submitted you can match it.
    //And send back response to html file, where ajax will refresh the key.
    $status = "success";
    $message = "
    Your form was processed succesfully<br>
    The text you sent was ".$text.", and the key you sent was ".$key.".
    The new key sent to you can be seen by pressing the button below, has value, ".$random."<br><br>
    ";
    }

    echo json_encode(array("status" => $status, "message" => $message, "key" => $random));

?>

希望这对您有所帮助。

于 2013-08-04T11:16:46.343 回答
0

由于您使用 ajax 返回值,请将新值保存到变量中,例如 new_input,

然后简单地使用,

$("#target_input_id").val(new_input);

或者您在 ajax 调用中的 .done() 函数应该是这样的,

.done(function ( data ) {
  $("#target_input_id").val(data); //assuming the php file only returns the value for input
});

由于您必须返回多个值,请查看这两个链接。

json - Jquery 在 ajax 调用中返回未定义的多个值

如何从 JQuery AJAX 调用中返回多个值?

现在 .done() 将是,

.done(function ( data ) {
      $("#key").val(data.key); 
      $("#nonce").val(data.nonce);
    });
于 2013-08-04T06:13:37.280 回答