2
A
回答
1
的源代碼的內部,一個局部函數add
定義:
add = function(key, value) {
value = jQuery.isFunction(value) ? value() : value;
s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
};
此功能通過轉義特殊字符準備的任何輸入。當對象被作爲參數傳遞,所述buildParams
方法被調用時,使剛剛定義add
功能:
for (var prefix in a) {
buildParams(prefix, a[ prefix ], traditional, add);
}
裏面的遞歸函數buildParams
,所述add
方法被調用用於每個對象的參數。味道不同,但一般都在以下格式:
add(prefix, obj);
相關代碼,從 the source code導出:
// Serialize an array of form elements or a set of
// key/values into a query string
param: function(a, traditional) {
var s = [],
add = function(key, value) {
// If value is a function, invoke it and return its value
value = jQuery.isFunction(value) ? value() : value;
s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
};
// Set traditional to true for jQuery <= 1.3.2 behavior.
if (traditional === undefined) {
traditional = jQuery.ajaxSettings.traditional;
}
// If an array was passed in, assume that it is an array of form elements.
if (jQuery.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {
// Serialize the form elements
jQuery.each(a, function() {
add(this.name, this.value);
});
} else {
// If traditional, encode the "old" way (the way 1.3.2 or older
// did it), otherwise encode params recursively.
for (var prefix in a) {
buildParams(prefix, a[ prefix ], traditional, add);
}
}
// Return the resulting serialization
return s.join("&").replace(r20, "+");
}
});
function buildParams(prefix, obj, traditional, add) {
if (jQuery.isArray(obj)) {
// Serialize array item.
jQuery.each(obj, function(i, v) {
if (traditional || rbracket.test(prefix)) {
// Treat each array item as a scalar.
add(prefix, v);
} else {
// If array item is non-scalar (array or object), encode its
// numeric index to resolve deserialization ambiguity issues.
// Note that rack (as of 1.0.0) can't currently deserialize
// nested arrays properly, and attempting to do so may cause
// a server error. Possible fixes are to modify rack's
// deserialization algorithm or to provide an option or flag
// to force array serialization to be shallow.
buildParams(prefix + "[" + (typeof v === "object" || jQuery.isArray(v) ? i : "") + "]", v, traditional, add);
}
});
} else if (!traditional && obj != null && typeof obj === "object") {
// Serialize object item.
for (var name in obj) {
buildParams(prefix + "[" + name + "]", obj[ name ], traditional, add);
}
} else {
// Serialize scalar item.
add(prefix, obj);
}
}
1
這隱含地假設。通常,只要你有一個函數可以傳輸來自某個對象或參數的數據,就可以假設該函數能夠正確地轉義/參數化數據,以便傳遞任意字符串。
假設你使用的是良好的庫(jQuery是),你應該只需要在明確構建字符串時轉義一些東西。
例如,jQuery的text()
函數會自動HTML轉義您的文本。
相關問題
- 1. jQuery Ajax發送空的轉義數據
- 2. 通過POST轉義jQuery數據發送
- 3. 從jquery數據表發送帶有ajax調用的參數
- 4. 轉義用戶發送數據?
- 5. jquery沒有發送發佈數據
- 6. jquery發送發佈數據,但沒有定義url
- 7. 發送帶有文本數據的AJAX請求(jQuery)
- 8. 使用AJAX和JQuery發送帶有JSON數據的PUT調用?
- 9. jQuery的S.get發送帶有裝飾()數據
- 10. 發送數據從jQuery發送到phpexcel
- 11. jQuery沒有發送數據到codeigniter
- 12. jquery發送數據到php沒有ajax
- 13. jQuery傳送帶轉換
- 14. jQuery UI選項卡:如何發送帶有發佈數據的ajax請求?
- 15. 加載頁面時,如何在jquery中發送帶有ajax的發佈數據?
- 16. 發送帶有RakNet
- 17. 發送帶有MPDF
- 18. AngularJS:PUT發送帶有URL數據,但不能作爲JSON數據
- 19. 使用JSON發送帶有數據的推送通知
- 20. jQuery發送空數據
- 21. Jquery .post不發送數據
- 22. 用jQuery發送JSON數據
- 23. 發送數據通過jQuery
- 24. jQuery ajax,發送數據
- 25. jQuery barrating.js - 發送ID數據
- 26. 發送帶有LINK_TO和數據沒有的TurboLink
- 27. 發送帶有表格數據的javascript數組
- 28. 發送帶有IP_TOS輔助數據的UDP數據包時sendmsg()失敗,並且發送UDP數據包
- 29. 改造1,發送帶有自定義按鍵多形式的數據值
- 30. jQuery/ajax不會發送發佈數據
是的,這是真的。如果在文檔中找不到它,請查看源代碼。編輯:我已經在** [源代碼](http://code.jquery.com/jquery-1.7.1.js)**:s [s.length] = encodeURIComponent(key)+「=」 + encodeURIComponent(value);' – 2012-01-05 16:20:02
releated:http://stackoverflow.com/questions/2231810/escaping-jquery-data-being-sent-via-post – 2012-01-05 16:21:10
可能的重複[如何正確地轉義HTML作爲數據發送jQuery的.ajax函數](http://stackoverflow.com/questions/4122298/how-to-properly-escape-html-sent-as-data-in-jquerys-ajax-function) – 2012-01-05 16:22:23