如何检查从服务器收到的响应是 html 还是 json 并在 extjs 中按名称查找 html 表单?
Posted
技术标签:
【中文标题】如何检查从服务器收到的响应是 html 还是 json 并在 extjs 中按名称查找 html 表单?【英文标题】:How to check if the response received from server is html or json and find the html form by name in extjs? 【发布时间】:2020-08-14 11:36:39 【问题描述】:我有一个向后端发送 ajax 请求的 extjs 应用程序。如果是活动会话,后端将发送 json 格式的对象,如果会话不活动,则发送 html 页面
我想确定响应中收到的是 json 还是 html 类型,并相应地执行进一步的操作
这里是示例代码:
Ext.Ajax.Request(
url: "localhost",
scope: this,
method: "POST"
success: 'successongettingdata'
)
successongettingdata : function(connection,response)
//check for response if html or json and do actions accordingly
//how to extract from response that if it is json or html or string
//if it is html, get form by its name
【问题讨论】:
理想情况下,您会返回未经授权的 401 并将它们重定向到某个静态页面。否则,您是否尝试过查看response.getResponseHeader('content-type')
?
【参考方案1】:
参考@incutonez,您可以从返回的请求中查看Content-Type
标头。
Ext.Ajax.request(
url: "localhost",
scope: this,
method: "POST",
success: 'successongettingdata'
);
successongettingdata : function(connection, response)
if(connection.getResponseHeader("Content-Type").includes("text/html"))
else if(connection.getResponseHeader("Content-Type").includes("application/json"))
如果Content-Type
有误,你也可以尝试解码返回的数据。
successongettingdata : function(connection, response)
try
let decodeResponse = Ext.decode(connection.responseText);
//is json
catch (e)
//isn't json
【讨论】:
我刚刚在我的生产应用程序制作问题中发现了这种方法。问题是, === "application/json" 没有捕捉到 "application/json;charset=UTF8" (和其他变体)。这 ”;”在规范中。使用时请小心。 @Augunrik 好主意,更新了我的答案以纠正这个问题 我已经解决了我们应用程序中的问题。您的答案的一个注释:内容类型不区分大小写。所以我认为 toLowerCase() 需要安全。以上是关于如何检查从服务器收到的响应是 html 还是 json 并在 extjs 中按名称查找 html 表单?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查网络响应来自 Alamofire 请求中的缓存或服务器?
Chrome 扩展错误“未检查的 runtime.lastError:消息端口在收到响应之前关闭”