Getting the actual URL after a POST which redirected using jquery .ajax()

I am following the PRG (Post-Redirect-Get) pattern in my web application, and use something like the following for doing most of my POSTs:

$.ajax({
    type: 'POST',
    url: 'A.html',
    data: '....',
    statusCode: {
        302: function() {
            alert("302"); // this is never called
        },
        200: function() {
            alert("200");
        },
    },
    success: function (data, textstatus) {
        alert('You are now at URL: ' + ??);
    },
    error: function (data) {
    },
    complete: function (jqXHR, textstatus) {
        alert('You are now at URL: ' + ??);
    },
});

I need to get the URL AFTER any redirection has occurred, i.e. the URL of the final GET that the .ajax() function called. For example a POST to A.html may redirect to either B.html or C.html (always via 302's). How do I get the final URL?

I am using jquery 1.5.1, and using a proxy have witnessed that jquery is silently following the redirects - which I am happy with. I don't care about any of the URLs which responded with 302's - I would just like to know the URL of the final request at the time that .ajax()'s "success:" or "complete:" hooks are fired.

Answers


I finally solved this issue by adding an additional header into all my responses (eg "X-MYAPP-PATH: /Admin/Index").

My javascript could thus be changed to the following:

success: function (data, textstatus, xhrreq) {
    alert('You are now at URL: ' + xhrreq.getResponseHeader("X-MYAPP-PATH"));
},

I still believe however that jquery should be able to give me the current URL, so I consider this a hack.


Need Your Help

PHPUnit Agile Web Developement with Yii

selenium yii phpunit

I'm After reading other similar posts I felt I've followed everything to the letter, hence my confusion and this post:

Use MySQL database query results to plot R graph using RApache and Brew

mysql r brew rapache

I am trying to plot a graph using R which is populated by MySQL query results. I have the following code: