2014-02-24 46 views
0

有沒有辦法將一個額外字段傳遞給jqXHR對象?在這裏我的情況:AJAX將自定義字段傳遞給jqXHR

我返回HttpResponseMessage像這樣:

response.ReasonPhrase = "someString " + Resources.Messages.NoData; 
response.StatusCode = HttpStatusCode.NoContent; 
return response; 

但也有一些情況下,我需要通過另一個StatusCode = HttpStatusCode.NoContent;,出於不同的原因:

response.ReasonPhrase = "anotherString " + Resources.Messages.NoMoreData; 
response.StatusCode = HttpStatusCode.NoContent; 
return response; 

因爲消息都是本地化的(Resources.Messages)到用戶的語言,我需要一個額外的字段來檢查,例如它是否等於"someString ""anotherString "或「....」在AJAXsuccess回電:

$.ajax({ 
type: 'POST', 
url: '/api/testing/test', 
data: jobject, 
contentType: 'application/json', 
success: function (data, status, xhr) { 
    if (status == "nocontent" && xhr.statusText.startsWith("someString")) { 
     // do something 
    } 
    if (status == "nocontent" && xhr.statusText.startsWith("anotherString")) { 
     // do something 
    } 

error: function (xhr) { 
    debugger; 
    if (xhr.responseJSON == 'UnableToParseDateTime') { 
     // do something 
    } 
} 
}); 

奇怪的是,是,xhr.statusText不支持xhr.statusText.startsWith()。因此,對"someString ""anotherString "或「....」進行平等檢查不起作用。

我注意到,在success回調中,responseText總是空的。如果我能從服務器中「填充」那個,那就很好。如果不是,我如何爲jqXHR對象增加一個字段?或者定義一些新的自定義HttpStatusCode

回答

1

我不知道,如果是startsWith標準的JavaScript,但你總是可以添加自己的函數將字符串原型(見this SO):

if (typeof String.prototype.startsWith != 'function') { 
    String.prototype.startsWith = function(str) { 
    return this.lastIndexOf(str, 0) === 0; 
    }; 
} 

,這將允許你檢查任何字符串startsWith


爲了幫助這個問題上增加了jqXHR對象,你採取看看docs?您可以修改AJAX調用的beforeSend函數中的jqXHR對象。

+0

你有沒有在asp.net-webapi jqXHR自定義字段的例子?我閱讀文檔是,但不是關於AJAX的所有內容。 – Quoter

相關問題