2009-08-17 7 views
0

Je développe une application Web fortement scriptée et je suis en train de faire quelques erreurs. Mais pour ce faire, j'ai besoin d'un moyen d'accéder aux paramètres AJAX qui ont été donnés à jQuery pour cette requête AJAX spécifique. Je n'ai rien trouvé sur jquery.com alors je vous demande si vous avez une idée de comment y arriver.Enregistrer les paramètres Ajax temporaires dans jQuery

Voici un exemple de la façon dont je veux faire codewise:

function add_recording(filename) { 
    updateCounter('addRecording','up'); 
    jQuery.ajax({ 
     url: '/cgi-bin/apps/ajax/Storyboard', 
     type: 'POST', 
     dataType: 'json', 
     data: { 
      sid: sid, 
      story: story, 
      screen_id: screen_id, 
      mode: 'add_record', 
      file_name: filename 
     }, 
     success: function(json) { 
      updateCounter('addRecording','down'); 
      id = json[0].id; 
      create_record(id, 1, 1, json); 
     }, 
     error: function() { 
      updateCounter('addRecording','error',hereBeData); 
     } 
    }) 
} 

hereBeData serait les données nécessaires (comme l'URL, le type, dataType et les données réelles). UpdateCounter est une fonction qui met à jour la zone d'état avec de nouvelles informations. C'est également la zone où l'utilisateur est averti d'une erreur et où un bouton Ignorer et réessayer serait généré, en fonction des informations rassemblées dans hereBeData.

Répondre

3

Indépendamment d'appeler complete()success() ou error() - this sera égal à l'objet passé à $ .ajax() bien que les valeurs URL et les données ne seront pas toujours exactement la même chose - il convertira paramerters et modifier l'objet autour d'un peu. Vous pouvez ajouter une touche personnalisée à l'objet de se rappeler vos trucs bien:

$.ajax({ 
    url: '/', 
    data: {test:'test'}, 
    // we make a little 'extra copy' here in case we need it later in an event 
    remember: {url:'/', data:{test:'test'}}, 

    error: function() { 
    alert(this.remember.data.test + ': error'); 
    }, 
    success: function() { 
    alert(this.remember.data.test + ': success'); 
    }, 
    complete: function() { 
    alert(this.remember.data.url + ': complete'); 
    } 
}); 

Bien sûr - puisque vous définissez ces données à l'origine d'une source - vous pouvez compter sur la portée des variables pour le maintenir autour de vous:

$("someelement").click(function() { 
    var theURL = $(this).attr('href'); 
    var theData = { text: $(this).text(); } 
    $.ajax({ 
    url: theUrl, 
    data: theData, 
    error: function() { 
     alert('There was an error loading '+theURL); 
    } 
    }); 

    // but look out for situations like this: 
    theURL = 'something else'; 
}); 
+0

complète est toujours frapper – redsquare

+0

oui - bien sûr, il est - son cas particulier ne demandait que sur l'événement d'erreur, mais quel que soit celui qui est appelé (ce qui pourrait être un succès/erreur et ensuite complet - 'ceci 'pointe toujours vers le paramètre objet de la fonction ajax. – gnarf

+0

Je peux voir où cela se passe. Donc, peu importe comment cela est fait, je dois le stocker explicitement pour mon but. – Mike

0

Vous pouvez utiliser l'ajax complete event qui vous transmet les ajaxOptions utilisés pour la requête. Les feux complets pour une demande réussie et échouée.

complete : function (event, XMLHttpRequest, ajaxOptions) { 
    //store ajaxOptions here 
    //1 way is to use the .data on the body for example 
    $('body').data('myLastAjaxRequest', ajaxOptions); 
} 

Vous pouvez ensuite retireve les options à l'aide

var ajaxOptions = $('body').data('myLastAjaxRequest'); 
+0

Il y a beaucoup d'informations là-bas (url et le type est tout ce qu'il ya), mais je ne peux pas trouver mes données – Mike

+0

Il devrait tous être en ajaxOptions.data Je l'ai testé et je peux confirmer cette – redsquare

1

Découvrez les paramètres que vous pouvez obtenir dans le callback for error.

function (XMLHttpRequest, textStatus, errorThrown) { 
    // typically only one of textStatus or errorThrown 
    // will have info 
    this; // the options for this ajax request 
} 
Questions connexes