【问题标题】:refresh input after ajax submit formajax提交表单后刷新输入
【发布时间】:2013-08-04 06:01:47
【问题描述】:

我到处搜索,但找不到如何通过 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 没有刷新页面,所以它将发送与以前相同的键值。

【问题讨论】:

  • ajax 成功后只需编写以下代码。 jQuery('#nonce').val(''); jQuery('#key').val('');
  • 不好,它删除了刷新页面时不像普通 POST 那样刷新它的值,我只需要刷新输入
  • 输入空白值
  • 是的,我试过不好,我只需要刷新,这个输入包含来自 DATABASE 的 KEYS,我需要在表单提交后刷新输入.. 有什么想法吗?
  • 您需要更具体。 “刷新输入”是什么意思?如果你想重置你的表格,像 Datta 所说的就是你要找的东西。否则你需要改变你的问题来澄清你的观点。

标签: jquery ajax json


【解决方案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));

?>

希望对你有所帮助。

【讨论】:

  • 非常感谢你的帮助,所以它是我所拥有的,但在你的 php 中,当你检查密钥时,我有 php 函数可以做到这一点,只返回 msg 文本而不生成新密钥我会在下一个答案中告诉你我的意思,再次感谢你。
  • 好的。欢迎。但是建议请使用您的英语。 ;)
  • 为新问题编辑问题是一个错误的想法。你应该开始一个新的。请添加一个新问题,并在此处给我链接。使这个问题和以前一样。我肯定会帮助更新的。
  • stackoverflow.com/questions/18053078/… 在这里我做一个新的请帮帮我我卡得很厉害我是新手 ajax
  • 是的,我会在下课后看到该链接。
【解决方案2】:

由于您使用 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 return undefined for multiple values in ajax call

How to return multiple values from JQuery AJAX call?

现在 .done() 将是,

.done(function ( data ) {
      $("#key").val(data.key); 
      $("#nonce").val(data.nonce);
    });

【讨论】:

  • 它不好,看我会解释得更好:我有表单登录,在我的表单登录中,我有生成随机密钥的 php 函数,我通过 ajax post 和服务器端文件发送它们验证它是否正确的代码。现在代码更改了服务器端的每个帖子,所以我也需要在 ajax 响应之后刷新它,所以我需要刷新特定的输入 - 只是刷新而不采用新值并且不清除只是让它刷新..
  • 仍然不清楚您在寻找什么,这就是您刷新/更改输入值的方式。看这里。 jsfiddle.net/TSc8E/48
  • 感谢您的帮助,它接近我需要的但仍然不是我需要的,看我有登录表单。在我的登录表单中,我隐藏了使用 php 函数生成随机哈希键的输入。我使用 ajax POST 将密钥发送到服务器端 php 文件并验证密钥是否正确。所以问题是每次我在服务器端按提交键更改而不是在输入上,所以它发送旧键而不是新键,所以我需要触发 ajax 将此输入刷新到服务器端键,只有当我刷新页面时它才会显示新密钥但 ajax 不刷新
  • 你是先刷新服务器端还是客户端的key?
  • 在表单输入里面的php服务器端函数生成的keys,使用后服务器端自动刷新,我的意思是如果这个key:123,验证并且已经被使用,它会变成132在服务器端 - 数据库。 - 但它不会改变输入,因为 ajax 发布不刷新页面。
猜你喜欢
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 2013-05-19
  • 2012-10-11
  • 2012-04-26
  • 1970-01-01
  • 2020-02-06
相关资源
最近更新 更多