提交表单后,AJAX调用无效

时间:2015-11-11 09:47:11

标签: javascript php jquery ajax

这是我在www.domain-a.de/external.search.js上的代码。我从www.domain-b.de/test.php上打电话:



package org.tastefuljava.tomcat;

import java.io.IOException;
import java.security.Principal;
import javax.servlet.ServletException;
import org.apache.catalina.Realm;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.valves.ValveBase;

public class AutoBasicValve extends ValveBase {
    private static final String BASIC_PREFIX = "basic ";

    private String encoding = "UTF-8";

    public String getEncoding() {
        return encoding;
    }

    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }

    @Override
    public void invoke(Request request, Response response)
            throws IOException, ServletException {
        Principal principal = request.getUserPrincipal();
        Realm realm = getContainer().getRealm();
        if (principal != null) {
            if (containerLog.isDebugEnabled()) {
                containerLog.debug(
                        "Already authenticated as: " + principal.getName());
            }
        } else if (realm == null) {
            if (containerLog.isDebugEnabled()) {
                containerLog.debug("No realm configured");
            }
        } else {
            String auth = request.getHeader("authorization");
            if (auth != null) {
                if (auth.toLowerCase().startsWith(BASIC_PREFIX)) {
                    auth = auth.substring(BASIC_PREFIX.length());
                    byte[] bytes = Base64.decode(auth);
                    auth = new String(bytes, encoding);
                    int ix = auth.indexOf(':');
                    if (ix >= 0) {
                        String username = auth.substring(0, ix);
                        String password = auth.substring(ix+1);
                        principal = realm.authenticate(username, password);
                        if (principal == null) {
                            containerLog.warn(
                                    "Could not authenticate " + username);
                        } else {
                            containerLog.info(
                                    "Authenticated as " + principal.getName());
                            request.setAuthType("BASIC");
                            request.setUserPrincipal(principal);
                        }
                    }
                }
            }
        }
        getNext().invoke(request, response);
    }
}




运行此代码后,我无法在控制台中收到任何消息。该代码有什么问题?

2 个答案:

答案 0 :(得分:1)

frm.submit(function (ev) {
  ev.preventDefault();
.....rest of code.

答案 1 :(得分:0)

您的代码没有调用该项的submit处理程序,它只是绑定它。您应该在frm.submit(function回调之外进行$.getJSON绑定;然后在回调中添加

frm.submit()

触发事件。

此外,当提交发生时,您的操作将会发生,但表单将正常提交到后端,导致页面重新加载。

行后

frm.submit(function (ev) {  

添加

ev.preventDefault();

所以你的整体代码应该是

(function ($) {
  var frm = $('#embedded_search form');
  var myUrl = 'http://www.domain-a.de/get-form-values?jsoncallback=?'

  frm.submit(function (ev) {
      ev.preventDefault();

      $.getJSON( myUrl )
        .done(function( json ) {
          console.log( "JSON Data: " + json );
        })
        .fail(function( jqxhr, textStatus, error ) {
          var err = textStatus + ", " + error;
          console.log( "Request Failed: " + err );
        });
    }); 

  // make the ajax request
  $.getJSON('http://www.domain-a.de/external-search.js?jsoncallback=?', function(data) {
    // append the form to the container
    $('#embedded_search').append(data);
    $('#embedded_search form').attr('action','');


    // click on submit button
     frm.submit();  
  });      
})(jQuery);
相关问题