Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 成功调用ajax后更改包装器div中的表单/内容_Javascript_Jquery_Html_Ajax - Fatal编程技术网

Javascript 成功调用ajax后更改包装器div中的表单/内容

Javascript 成功调用ajax后更改包装器div中的表单/内容,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,在发布相关代码之前,让我简要解释一下我当前的解决方案、问题陈述和期望的结果 当前解决方案:我有一个登录包装器,其中有一个表单,在成功登录时,我正在重新加载页面,表单内容被另一个表单替换 当前解决方案存在问题,因为我在web应用程序中使用了许多其他ajax调用。我不想重新加载整个页面。正因为如此,我失去了从ajax调用中获取的数据 所需的结果只是刷新/重新加载/替换登录包装器的html部分,用户在成功登录ajax调用后应保持在同一页面上 这是我的登录ajax调用,响应是成功还是失败 functio

在发布相关代码之前,让我简要解释一下我当前的解决方案、问题陈述和期望的结果

当前解决方案:我有一个登录包装器,其中有一个表单,在成功登录时,我正在重新加载页面,表单内容被另一个表单替换

当前解决方案存在问题,因为我在web应用程序中使用了许多其他ajax调用。我不想重新加载整个页面。正因为如此,我失去了从ajax调用中获取的数据

所需的结果只是刷新/重新加载/替换登录包装器的html部分,用户在成功登录ajax调用后应保持在同一页面上

这是我的登录ajax调用,响应是成功还是失败

function loginPost(data) {

    return $.ajax({

        url: "/some-api/login",
        type: "POST",
        dataType: "json",
        contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
        async: true,
        data:data
    });
}
登录包装JS和一些错误处理。注意:在这个函数中,您将看到我使用的是一个位置重新加载方法,我不希望它成为我想要的结果

function login(params) {

    if(checkEmpty("loginEmail") && checkEmpty("password")) {

        var emailField = $("#loginEmail").val(),
            passwordField = $("#password").val(),
            data = "login=" + emailField + "&password=" + passwordField;

        for (var key in params) {
            data += "&" + key + "=" + params[key];
        }

        // Hide errors as default
        $("#loginErrorWrapper").hide();

        // Try to launch the "normal" submit operation to make browser save email-field's value to cache
        $('#loginSubmitHidden').click();

        // Send data to server and refresh the page if everything is ok
        $.when(loginPost(data)).done(function(map) {

            if(!hasErrors(map)) {

                var lang = map.language;
                if (lang != "") {
                    changeLanguage(lang)
                }
                else {
                    lang = 'en';
                }

                location.reload();
            } else {

                if (map.errorCode == "155") {

                    $.fancybox({
                        href : '#termsAcceptancePopup',
                        title : '',
                        beforeLoad : function() {
                            $('#acceptTermsButton').attr('onclick','javascript:login({policyChecked:true});$.fancybox.close();');
                        },
                        helpers : {
                            overlay : { closeClick: false }
                        }
                    });

                } else {

                    var errorString = getErrorMessage(map);
                    $("#loginErrorWrapper").show();
                    $("#loginErrorWrapper").html(errorString);

                }

            }

        });
    }
}
原始HTML结构

<div id="loginDivWrapper" class="col-sm-6 col-md-7">
  <c:choose>

    <c:when test="${loginUser == null}">
      <form action="" id="login_form" class="form-inline bdr-gradient" autocomplete="on" onkeypress="return event.keyCode != 13;">
      </form>
    </c:when>

    <c:otherwise>
    <form action="" id="postlogin_form" class="form-inline bdr-gradient">
    </form>
    </c:otherwise>  

  </c:choose>
</div>

在表单标签中,我有所有常用的电子邮件、密码、登录按钮、语言下拉列表等。请告诉我,如果您需要任何进一步的信息,如成功登录后返回语言值,您也可以返回其他表单的html内容。用返回的contents值替换DIV[ID loginDivWrapper]的内容

    $("#loginDivWrapper").html(map.yourcontents); 

如果我只是替换HTML内容,我仍然需要刷新页面,以便在登录包装器中显示登录后的内容。