2009-08-17 24 views
0

我正在開發一個大量腳本化的Web應用程序,現在正在進行一些錯誤處理。但要做到這一點,我需要一種方法來訪問爲特定的AJAX請求提供給jQuery的AJAX參數。我在jquery.com上沒有發現任何東西,所以我問你們如果你有任何想法如何做到這一點。在jQuery中保存臨時Ajax參數

下面是我要如何做到這一點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將需要的數據(如URL,類型,數據類型,且實際數據)。

updateCounter是一個用新信息更新狀態區域的功能。這也是用戶收到錯誤通知的區域,以及根據在hereBeData中收集的信息生成關閉和重試按鈕的區域。

回答

3

無論主叫complete()success()error()的 - this將等於傳遞給$阿賈克斯()的對象雖然URL和數據的價值並不總是完全一樣的 - 它會轉換paramerters和編輯對象大約一點。您可以添加自定義的關鍵對象要記住,雖然你的東西:

$.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'); 
    } 
}); 

當然 - 因爲你最初是從一些源設置此數據 - 你可以依靠的變量範圍,以保持它周圍你:

$("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

完全是總是碰到 – redsquare 2009-08-17 09:48:31

+0

是的 - 當然是 - 他的特殊情況只是詢問錯誤事件,但不管哪一個被調用(這可能是成功/錯誤,然後完成 - 「this」仍然指向ajax函數的對象參數。 – gnarf 2009-08-17 09:56:40

+0

我可以看到這是怎麼回事。所以無論如何做,我都需要明確地將其存儲以達到我的目的。 – Mike 2009-08-17 10:02:39

0

您可以使用ajax complete event,它向您傳遞用於請求的ajaxOptions。成功和失敗的請求都會引發火災。

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

然後,您可以使用

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

還有就是信息出現了很多(URL和類型都在那裏),但我無法找到我的數據 – Mike 2009-08-17 10:02:07

+0

它都應該在ajaxOptions.data 我已經測試過,可以確認這 – redsquare 2009-08-17 11:23:28

1

退房哪些參數可以在callback for error得到retireve的選項。

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