Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
J
jquery
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
夏彬
jquery
Commits
fef0f635
Commit
fef0f635
authored
Dec 21, 2010
by
jaubourg
Committed by
jaubourg
Dec 31, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rewrote the data conversion logic in ajax. Should be cleaner and faster.
parent
4c49c87d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
70 additions
and
112 deletions
+70
-112
ajax.js
src/ajax.js
+2
-7
xhr.js
src/xhr.js
+68
-105
No files found.
src/ajax.js
View file @
fef0f635
...
...
@@ -166,11 +166,6 @@ jQuery.extend({
xhr
:
function
()
{
return
new
window
.
XMLHttpRequest
();
},
xhrResponseFields
:
{
xml
:
"XML"
,
text
:
"Text"
,
json
:
"JSON"
},
accepts
:
{
xml
:
"application/xml, text/xml"
,
...
...
@@ -195,13 +190,13 @@ jQuery.extend({
// 4) the catchall symbol "*" can be used
// 5) execution will start with transport dataType and THEN continue down to "*" if needed
prefilters
:
{},
// Transports bindings
// 1) key is the dataType
// 2) the catchall symbol "*" can be used
// 3) selection will start with transport dataType and THEN go to "*" if needed
transports
:
{},
// Checkers
// 1) key is dataType
// 2) they are called to control successful response
...
...
src/xhr.js
View file @
fef0f635
...
...
@@ -6,11 +6,9 @@ var rquery_xhr = /\?/,
rnoContent
=
/^
(?:
GET|HEAD
)
$/
,
rts
=
/
([
?&
])
_=
[^
&
]
*/
,
rurl
=
/^
(\w
+:
)?\/\/([^\/
?#
]
+
)
/
,
sliceFunc
=
Array
.
prototype
.
slice
,
isFunction
=
jQuery
.
isFunction
;
sliceFunc
=
Array
.
prototype
.
slice
;
// Creates a jQuery xhr object
jQuery
.
xhr
=
function
(
_native
)
{
...
...
@@ -86,7 +84,7 @@ jQuery.xhr = function( _native ) {
if
(
data
&&
s
.
processData
&&
typeof
data
!=
"string"
)
{
data
=
s
.
data
=
jQuery
.
param
(
data
,
s
.
traditional
);
}
// Get internal
internal
=
jQuery
.
xhr
.
prefilter
(
s
).
transport
(
s
);
...
...
@@ -147,7 +145,7 @@ jQuery.xhr = function( _native ) {
requestHeaders
[
i
.
toLowerCase
()
]
=
headers
[
i
];
}
}
callbackContext
=
s
.
context
||
s
;
globalEventContext
=
s
.
context
?
jQuery
(
s
.
context
)
:
jQuery
.
event
;
...
...
@@ -223,112 +221,77 @@ jQuery.xhr = function( _native ) {
// Chain data conversions and determine the final value
// (if an exception is thrown in the process, it'll be notified as an error)
try
{
function
checkData
(
data
)
{
if
(
data
!==
undefined
)
{
var
testFunction
=
s
.
dataCheckers
[
srcDataType
];
if
(
isFunction
(
testFunction
)
)
{
testFunction
(
data
);
}
}
}
function
convertData
(
data
)
{
var
conversionFunction
=
dataConverters
[
srcDataType
+
" => "
+
destDataType
]
||
dataConverters
[
"* => "
+
destDataType
],
noFunction
=
!
isFunction
(
conversionFunction
);
if
(
noFunction
)
{
if
(
srcDataType
!=
"text"
&&
destDataType
!=
"text"
)
{
// We try to put text inbetween
var
first
=
dataConverters
[
srcDataType
+
" => text"
]
||
dataConverters
[
"* => text"
],
second
=
dataConverters
[
"text => "
+
destDataType
]
||
dataConverters
[
"* => "
+
destDataType
],
areFunctions
=
isFunction
(
first
)
&&
isFunction
(
second
);
if
(
areFunctions
)
{
conversionFunction
=
function
(
data
)
{
return
second
(
first
(
data
)
);
};
var
i
,
current
,
prev
,
checker
,
conv1
,
conv2
,
oneConv
,
convertion
,
dataTypes
=
s
.
dataTypes
,
dataCheckers
=
s
.
dataCheckers
,
dataConverters
=
s
.
dataConverters
,
dataFilter
=
s
.
dataFilter
,
responses
=
{
"xml"
:
"XML"
,
"text"
:
"Text"
};
for
(
i
=
0
;
i
<
dataTypes
.
length
;
i
++
)
{
current
=
dataTypes
[
i
];
if
(
i
)
{
prev
=
dataTypes
[
i
-
1
];
if
(
prev
===
"*"
)
{
prev
=
current
;
}
else
if
(
current
!==
"*"
&&
prev
!==
current
)
{
oneConv
=
conv1
=
dataConverters
[
(
conversion
=
prev
+
" => "
+
current
)
]
||
dataConverters
[
"* => "
+
current
];
if
(
!
oneConv
&&
prev
!==
"text"
&&
current
!==
"text"
)
{
conv1
=
dataConverters
[
prev
+
" => text"
]
||
dataConverters
[
"* => text"
];
conv2
=
dataConverters
[
"text => "
+
current
];
}
if
(
oneConv
||
conv1
&&
conv2
)
{
response
=
oneConv
?
conv1
(
response
)
:
conv2
(
conv1
(
response
)
);
}
else
{
throw
"no "
+
conversion
;
}
noFunction
=
!
areFunctions
;
}
if
(
noFunction
)
{
jQuery
.
error
(
"no data converter between "
+
srcDataType
+
" and "
+
destDataType
);
}
}
return
conversionFunction
(
data
);
}
var
dataTypes
=
s
.
dataTypes
,
i
,
length
,
data
=
response
,
dataConverters
=
s
.
dataConverters
,
srcDataType
,
destDataType
,
responseTypes
=
s
.
xhrResponseFields
;
for
(
i
=
0
,
length
=
dataTypes
.
length
;
i
<
length
;
i
++
)
{
destDataType
=
dataTypes
[
i
];
if
(
!
srcDataType
)
{
// First time
// Copy type
srcDataType
=
destDataType
;
// Check
checkData
(
data
);
// Apply dataFilter
if
(
isFunction
(
s
.
dataFilter
)
)
{
data
=
s
.
dataFilter
(
data
,
s
.
dataType
);
// Recheck data
checkData
(
data
);
}
}
else
{
// Subsequent times
// handle auto
// JULIAN: for reasons unknown to me === doesn't work here
if
(
destDataType
==
"*"
)
{
destDataType
=
srcDataType
;
}
else
if
(
srcDataType
!=
destDataType
)
{
// Convert
data
=
convertData
(
data
);
// Copy type & check
srcDataType
=
destDataType
;
checkData
(
data
);
}
checker
=
dataCheckers
[
current
];
if
(
response
!=
null
&&
checker
)
{
checker
(
response
);
}
// Copy response into the xhr if it hasn't been already
var
responseDataType
,
responseType
=
responseTypes
[
srcDataType
];
if
(
responseType
)
{
responseDataType
=
srcDataType
;
}
else
{
responseType
=
responseTypes
[
responseDataType
=
"text"
];
if
(
responses
[
current
]
)
{
xhr
[
"response"
+
responses
[
current
]
]
=
response
;
responses
[
current
]
=
0
;
}
if
(
responseType
!==
1
)
{
xhr
[
"response"
+
responseType
]
=
data
;
responseTypes
[
responseType
]
=
1
;
if
(
!
i
&&
dataFilter
)
{
response
=
dataFilter
(
response
);
dataTypes
=
s
.
dataTypes
;
dataFilter
=
0
;
i
--
;
}
}
// We have a real success
success
=
data
;
success
=
response
;
isSuccess
=
1
;
}
catch
(
e
)
{
...
...
@@ -406,7 +369,7 @@ jQuery.xhr = function( _native ) {
// Ready state change
function
setState
(
value
)
{
xhr
.
readyState
=
value
;
if
(
isFunction
(
xhr
.
onreadystatechange
)
)
{
if
(
jQuery
.
isFunction
(
xhr
.
onreadystatechange
)
)
{
xhr
.
onreadystatechange
();
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment