jQuery AJAX Request 302 Redirect - What callbacks

2019-02-18 16:31发布

I'm working with an older system that is using jQuery 1.2.6. I am sending an AJAX Request via the jQuery.ajax function. The URL that it is hitting is sending a 302 HTTP Redirect response and eventually ends up with a 200 HTTP OK response. I have registered both a success and a complete callback, however neither of them are called.

My question is: Are there any callbacks that can/will be called after a redirect occurs?

jQuery.ajax({
    type: "GET",
    url: url,
    data: null,
    dataType: "json",
    async: false,
    success: function(data, textStatus) {
        alert("SUCCESS CALLED: " + textStatus);
    },      
    complete: function(xhr, status) {
        alert("COMPLETE CALLED");
    }
});

NOTE: The response is HTML, not JSON, however changing the dataType to html alters the request. It sends an OPTIONS request instead of a GET request, and it also no longer redirects. I need these redirects to occur.

2条回答
干净又极端
2楼-- · 2019-02-18 17:08

As per the comments:

Changing the dataType to html alters the request. It sends an OPTIONS request instead of a GET request, and it also no longer redirects.

This will happen when you send a crossdomain request. I.e., the url does not point to the same domain as where this script is been served from. This namely violates the Same Origin Policy. Not having access to the server code also confirms that it runs on a different domain. The HTTP OPTIONS request sent by jQuery should let the server return a response with an Allow header with a list of request methods which are allowed to be used on the particular URL so that jQuery could then continue accordingly. This is apparently not happening.

If the server is really completely out your control, you'd need to create a proxy on your server which connects the desired URL and streams its response back. Then alter the jQuery url to point to the proxy URL instead. It's unclear what programming language you're using, but your question history suggests that you're familiar with Java, in that case you can use a simple servlet with java.net.URLConnection or Apache HttpComponents Client for this.

查看更多
【Aperson】
3楼-- · 2019-02-18 17:08

Use jquery ajax option

dataType: 'jsonp'

to perform the redirect for cross-domain requests. (Was tested in FF/Chrome browsers)

But this resolution is useful only if you are not handle the response or if the cross-domain-url supports jsonp approach.

查看更多
登录 后发表回答