Return 来自 AJAX 命令的 JSON 中的响应
Return response in JSON from AJAX command
如何在 JSON 而不是 'text over HTML' 中获得原生 javascript AJAX 到 return 的响应?
说明:
在jquery下面AJAX函数returns JSON数据,这就是我们需要的。
JQUERY 代码
//ajax Handler function through which I set default attribute and send request function defined separately to send request to server
ajaxHandler = {
defaultAttributes: {
type: 'GET',
url: 'index.php/request',
datatype: 'json',
data: {},
success: null,
error: function(data) {
errorHandler.showError('An Error occurred while trying to retreive your requested data, Please try again...');
},
timeout: function() {
errorHandler.showError('The request has been timed out, Please check your Internet connection and try again...');
}
},
sendRequest: function(attributes) {
//i perform here through jquery
$.ajax(attributes);
}
现在,代码已更改为原生 javascript AJAX,我在其中发出 'application/json;charset=UTF-8' 请求,我在 'text over HTML' 中收到响应而不是 JSON.
原生 JAVASCRIPT
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
attributes.success(attributes.data);
}
}
xmlhttp.open(attributes.type, attributes.url);
xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xmlhttp.send((attributes.data));
在 Chrome 开发人员工具中比较两者,在网络选项卡下,这是我得到的 Jquery AJAX:
Remote Address:127.0.0.1:80
Request URL:http://localhost/1412-DressingAphrodite/Webapp/index.php/request/getallfeatures
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:/
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:no-cache
Connection:keep-alive
Cookie:PHPSESSID=tivt0hi9oqtbtjem7m9d0emhr1
Host:localhost
Pragma:no-cache
Referer:http://localhost/1412-DressingAphrodite/Webapp/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/39.0.2171.65 Chrome/39.0.2171.65 Safari/537.36
X-Requested-With:XMLHttpRequest
Response Headersview source
Connection:Keep-Alive
Content-Type:application/json; charset="UTF-8"
Date:Fri, 30 Jan 2015 04:43:07 GMT
Keep-Alive:timeout=5, max=18
Server:Apache/2.4.10 (Ubuntu)
Transfer-Encoding:chunked
X-Powered-By:PHP/5.5.12-2ubuntu4.1
这是我在原生 Javscript 中得到的 AJAX:
Remote Address: 127.0.0.1:80
Request URL: http://localhost/1412-Dre/Webapp/index.php/request/getallfeatures
Request Method: GET
Status Code: 403 Forbidden
Request Headersview source
Accept: /
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Cache-Control: no-cache
Connection: keep-alive
Content-Type: application/json;charset=UTF-8
Cookie: PHPSESSID=tivt0hi9oqtbtjem7m9d0emhr1
Host: localhost
Pragma: no-cache
Referer: http://localhost/1412-Dre/Webapp/ User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/39.0.2171.65 Chrome/39.0.2171.65 Safari/537.36
Response Headersview source
Connection: Keep-Alive
Content-Length: 1063
Content-Type: text/html
Date: Fri, 30 Jan 2015 06:40:26 GMT
Keep-Alive: timeout=5, max=90
Server: Apache/2.4.10 (Ubuntu)
X-Powered-By: PHP/5.5.12-2ubuntu4.1
注意 1063 的 'Content-Length' 值。我不确定这是否是问题所在。
所以,重复一遍,我怎样才能在 JSON 而不是 'text over HTML' 中获得原生 javascript AJAX 到 return 的响应?
收到来自服务器的 json 文本后,您可以随时执行以下操作:
var jsonStr = "<<your_json_string_response>>";
var jsonObject = eval('('+jsonStr+')');
如果您的回答有效 JSON,请尝试以下操作:
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
var jsonResponse = JSON.parse(xmlhttp.responseText);
console.log(jsonResponse);
}
}
你可以试试responseType
xmlhttp.responseType = 'json'
但首先检查浏览器支持。
如何在 JSON 而不是 'text over HTML' 中获得原生 javascript AJAX 到 return 的响应?
说明: 在jquery下面AJAX函数returns JSON数据,这就是我们需要的。
JQUERY 代码
//ajax Handler function through which I set default attribute and send request function defined separately to send request to server
ajaxHandler = {
defaultAttributes: {
type: 'GET',
url: 'index.php/request',
datatype: 'json',
data: {},
success: null,
error: function(data) {
errorHandler.showError('An Error occurred while trying to retreive your requested data, Please try again...');
},
timeout: function() {
errorHandler.showError('The request has been timed out, Please check your Internet connection and try again...');
}
},
sendRequest: function(attributes) {
//i perform here through jquery
$.ajax(attributes);
}
现在,代码已更改为原生 javascript AJAX,我在其中发出 'application/json;charset=UTF-8' 请求,我在 'text over HTML' 中收到响应而不是 JSON.
原生 JAVASCRIPT
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
attributes.success(attributes.data);
}
}
xmlhttp.open(attributes.type, attributes.url);
xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xmlhttp.send((attributes.data));
在 Chrome 开发人员工具中比较两者,在网络选项卡下,这是我得到的 Jquery AJAX:
Remote Address:127.0.0.1:80
Request URL:http://localhost/1412-DressingAphrodite/Webapp/index.php/request/getallfeatures
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:/
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:no-cache
Connection:keep-alive
Cookie:PHPSESSID=tivt0hi9oqtbtjem7m9d0emhr1
Host:localhost
Pragma:no-cache
Referer:http://localhost/1412-DressingAphrodite/Webapp/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/39.0.2171.65 Chrome/39.0.2171.65 Safari/537.36
X-Requested-With:XMLHttpRequest
Response Headersview source
Connection:Keep-Alive
Content-Type:application/json; charset="UTF-8"
Date:Fri, 30 Jan 2015 04:43:07 GMT
Keep-Alive:timeout=5, max=18
Server:Apache/2.4.10 (Ubuntu)
Transfer-Encoding:chunked
X-Powered-By:PHP/5.5.12-2ubuntu4.1
这是我在原生 Javscript 中得到的 AJAX:
Remote Address: 127.0.0.1:80
Request URL: http://localhost/1412-Dre/Webapp/index.php/request/getallfeatures
Request Method: GET
Status Code: 403 Forbidden
Request Headersview source
Accept: /
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Cache-Control: no-cache
Connection: keep-alive
Content-Type: application/json;charset=UTF-8
Cookie: PHPSESSID=tivt0hi9oqtbtjem7m9d0emhr1
Host: localhost
Pragma: no-cache
Referer: http://localhost/1412-Dre/Webapp/ User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/39.0.2171.65 Chrome/39.0.2171.65 Safari/537.36
Response Headersview source
Connection: Keep-Alive
Content-Length: 1063
Content-Type: text/html
Date: Fri, 30 Jan 2015 06:40:26 GMT
Keep-Alive: timeout=5, max=90
Server: Apache/2.4.10 (Ubuntu)
X-Powered-By: PHP/5.5.12-2ubuntu4.1
注意 1063 的 'Content-Length' 值。我不确定这是否是问题所在。 所以,重复一遍,我怎样才能在 JSON 而不是 'text over HTML' 中获得原生 javascript AJAX 到 return 的响应?
收到来自服务器的 json 文本后,您可以随时执行以下操作:
var jsonStr = "<<your_json_string_response>>";
var jsonObject = eval('('+jsonStr+')');
如果您的回答有效 JSON,请尝试以下操作:
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
var jsonResponse = JSON.parse(xmlhttp.responseText);
console.log(jsonResponse);
}
}
你可以试试responseType
xmlhttp.responseType = 'json'
但首先检查浏览器支持。