Index: /branches/amp_3_6/src/webui/webui/htdocs/new/src/cm/router.py
===================================================================
--- /branches/amp_3_6/src/webui/webui/htdocs/new/src/cm/router.py	(revision 2324)
+++ /branches/amp_3_6/src/webui/webui/htdocs/new/src/cm/router.py	(working copy)
@@ -64,12 +64,12 @@
                     tar = TarFiles()
                     ret = tar.create_tar(os.path.join(file_path, confi_dir_name), confi_dir_name + ".all_cfg_tar")
                 mark_expire_all(get_model('cm', ['configuration', 'config_file', 'ConfigFile']))
-                return HttpResponse(json.dumps([True]))
+                return HttpResponse(json.dumps([True]), content_type='application/json')
             except Exception as e:
                 if f:
                     f.close()
                 os.rename(file_path + '/' + file_name + '.bak', file_path + '/' + file_name)
-                return HttpResponse(json.dumps([False, "Save Failed!"]))
+                return HttpResponse(json.dumps([False, "Save Failed!"]), content_type='application/json')
         elif params.split('/')[0] == 'get_config':
             file_type = params.split('/')[1]
             file_name = '/'.join(params.split('/')[2:])
@@ -85,35 +85,35 @@
 
                 response_data = send_cli_to_device(device_info[0], cli, mode='enable')
                 if response_data['message'] == 'success':
-                    return HttpResponse(json.dumps([True, response_data['data']]))
+                    return HttpResponse(json.dumps([True, response_data['data']]), content_type='application/json')
                 elif response_data['message'] == 'requestfailed':
-                    return HttpResponse(json.dumps([False, 'Failed to send request to device. Please check the connection of device.']))
+                    return HttpResponse(json.dumps([False, 'Failed to send request to device. Please check the connection of device.']), content_type='application/json')
                 elif response_data['message'] == 'parsefailed':
-                    return HttpResponse(json.dumps([False, 'Failed to parse the response from device. Please check device restful API service.']))
+                    return HttpResponse(json.dumps([False, 'Failed to parse the response from device. Please check device restful API service.']), content_type='application/json')
                 elif response_data['message'] == 'parsefailed':
-                    return HttpResponse(json.dumps([False, 'Failed to send request to device. Please check restapi username and password of device.']))
-                return HttpResponse(json.dumps([True, 'Failed to get configuration from device because interval error.']))
+                    return HttpResponse(json.dumps([False, 'Failed to send request to device. Please check restapi username and password of device.']), content_type='application/json')
+                return HttpResponse(json.dumps([True, 'Failed to get configuration from device because interval error.']), content_type='application/json')
             else:
                 file_type = "customize" if file_type == "template" else file_type
                 file_path = default_dir + file_type + '/' + file_name
                 if not os.path.exists(file_path):
-                    return HttpResponse(json.dumps([False, 'The Config File Can not Find!']))
+                    return HttpResponse(json.dumps([False, 'The Config File Can not Find!']), content_type='application/json')
                 try:
                     f = open(file_path, 'r')
                     content = f.read()
                     f.close()
                     rst = [True]
                     rst.append(content)
-                    return HttpResponse(json.dumps(rst))
+                    return HttpResponse(json.dumps(rst), content_type='application/json')
                 except Exception as e:
                     if f:
                         f.close()
-                    return HttpResponse(json.dumps([False, 'Read Config File Failed!']))
+                    return HttpResponse(json.dumps([False, 'Read Config File Failed!']), content_type='application/json')
         elif params.split('/')[0] == 'get_output':
             task_name = params.split('/')[2]
             file_path = "%soutput/%s" % (default_dir, task_name)
             if not os.path.exists(file_path):
-                return HttpResponse(json.dumps([False, 'The Output File Can not Find!']))
+                return HttpResponse(json.dumps([False, 'The Output File Can not Find!']), content_type='application/json')
             try:
                 res_type = "text"
                 f = open(file_path, 'r')
@@ -128,11 +128,11 @@
                     rst.append(content)
                 else:
                     rst.append(output)
-                return HttpResponse(json.dumps(rst))
+                return HttpResponse(json.dumps(rst), content_type='application/json')
             except Exception as e:
                 if f:
                     f.close()
-                return HttpResponse(json.dumps([False, 'Read Output File Failed!']))
+                return HttpResponse(json.dumps([False, 'Read Output File Failed!']), content_type='application/json')
         elif params.split('/')[0] == 'get_vsites':
             # get ag vs name list
             device_name = '/'.join(params.split('/')[1:])
@@ -141,9 +141,9 @@
             
             response_data = send_cli_to_device(device_info[0], 'show virtual site name', mode='enable')
             if response_data['message'] == 'requestfailed':
-                return HttpResponse(json.dumps([False, 'Send request to device failed!']))
+                return HttpResponse(json.dumps([False, 'Send request to device failed!']), content_type='application/json')
             elif response_data['message'] == 'failed':
-                return HttpResponse(json.dumps([False, 'Get Config from device failed!']))
+                return HttpResponse(json.dumps([False, 'Get Config from device failed!']), content_type='application/json')
 
             vsite_parser = RegexParser('virtual site name "(?P<vsite_name>.*?)" "(?P<vsite_desc>.*?)" (?P<vsite_type>.*?) (?P<parent_vsite>.*?)', MATCHALL)
             ret = []
@@ -154,9 +154,9 @@
             for item in output:
                 ret.append({"name": item["vsite_name"]})
 
-            return HttpResponse(json.dumps([True, ret]))
+            return HttpResponse(json.dumps([True, ret]), content_type='application/json')
 
-    return HttpResponse(json.dumps([False, 'Get config file failed!']))
+    return HttpResponse(json.dumps([False, 'Get config file failed!']), content_type='application/json')
 
 def encode(key, clear):
     enc = []
@@ -195,7 +195,7 @@
                 "expires": expires
             }))
         }
-    return HttpResponse(json.dumps(res)) 
+    return HttpResponse(json.dumps(res), content_type='application/json') 
 
 def device_version(request):
     device_id = request.POST["device_id"]
@@ -211,7 +211,7 @@
         res["state"] = True
         res["version"] = version[0][0]
 
-    return HttpResponse(json.dumps(res)) 
+    return HttpResponse(json.dumps(res), content_type='application/json') 
 
 def get_enable_mode(request):
     auto_mode = False
@@ -224,7 +224,7 @@
     if auto_mode[0]:
         auto_mode = True if auto_mode[0][0] else False
 
-    return HttpResponse(json.dumps({"auto_mode": auto_mode}))
+    return HttpResponse(json.dumps({"auto_mode": auto_mode}), content_type='application/json')
 
 def set_enable_mode(request):
     auto_mode = json.loads(request.POST["auto_mode"])
@@ -242,7 +242,7 @@
             db.close()
         msg = "Failed to update the auto enable mode."
 
-    return HttpResponse(json.dumps({"state": state, "msg": msg}))
+    return HttpResponse(json.dumps({"state": state, "msg": msg}), content_type='application/json')
 
 def get_available_extension(request):
     available_ext_list = []
@@ -251,15 +251,15 @@
     check_status, check_output = commands.getstatusoutput("yum check-update --disablerepo=* --enablerepo=array")
     if check_status == 256:
         if check_output.find("Timeout")!= -1:
-            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository because connect to the repository timeout."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository because connect to the repository timeout."}), content_type='application/json')
         elif check_output.find("Cannot find a valid baseurl for repo")!= -1:
-            return HttpResponse(json.dumps({"state": False, "data": "Please set yum repository by CLI 'system repo <url>'."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Please set yum repository by CLI 'system repo <url>'."}), content_type='application/json')
         elif check_output.find("Could not resolve host")!= -1:
-            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository. Please check IP nameserver and yum repository URL."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository. Please check IP nameserver and yum repository URL."}), content_type='application/json')
         elif check_output.find("Connection refused")!= -1:
-            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository. Please check the port of yum repository URL."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository. Please check the port of yum repository URL."}), content_type='application/json')
         else:
-            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository."}), content_type='application/json')
 
     a_status, a_output = commands.getstatusoutput("yum --disablerepo=* --enablerepo=array list available")
     a_parser = RegexParser('(?P<name>\S+)\s+(?P<version>\S+)\s+(?P<repo>\S+)', MATCHALL, reflags=re.S)
@@ -270,7 +270,7 @@
     if available_ext:
         a_result = cli_parse(available_ext, a_parser)
     else:
-        return HttpResponse(json.dumps({"state": True, "data": []}))
+        return HttpResponse(json.dumps({"state": True, "data": []}), content_type='application/json')
 
     # check the rpm package was installed.
     for each in a_result:
@@ -287,7 +287,7 @@
         for each_pack in available_ext_list:
             status, output = commands.getstatusoutput('yum info --disablerepo="*" --enablerepo="array" %s' % each_pack)
             if status:
-                return HttpResponse(json.dumps({"state": False, "data": "Failed to execute the command."}))
+                return HttpResponse(json.dumps({"state": False, "data": "Failed to execute the command."}), content_type='application/json')
             else:
                 if output:
                     b_parser = RegexParser('Available Packages\nName\s*:\s*(?P<name>[^\n]*)\n' +
@@ -304,9 +304,9 @@
 
                     if result and result[0]:
                         res.append(result[0])
-        return HttpResponse(json.dumps({"state": True, "data": res}))
+        return HttpResponse(json.dumps({"state": True, "data": res}), content_type='application/json')
     else:
-        return HttpResponse(json.dumps({"state": True, "data": []}))
+        return HttpResponse(json.dumps({"state": True, "data": []}), content_type='application/json')
 
 def check_extension_obsoleted(ext_name):
     obsoleted_ext_name = "array_" + ext_name
@@ -318,33 +318,33 @@
 def install_extension(request, name):
     if check_extension_obsoleted(name):
         _extension_log(name, "install", "failed")
-        return HttpResponse(json.dumps({"state": False, "data": "Error: Failed to install extension '%s' beacause there is a obsoleted extension '%s'.Current system version do not support extension '%s' any more. Please remove it first and try to install '%s'." % (name, "array_" + name, "array_" + name, name)}))
+        return HttpResponse(json.dumps({"state": False, "data": "Error: Failed to install extension '%s' beacause there is a obsoleted extension '%s'.Current system version do not support extension '%s' any more. Please remove it first and try to install '%s'." % (name, "array_" + name, "array_" + name, name)}), content_type='application/json')
     # check the dependency
     dep = check_extension_dep(name)
     if not dep[0]:
         _extension_log(name, "install", "failed")
         oper_log('error', 'extensions', 'Failed to install the extension %s. %s.' % (name, dep[1]))
-        return HttpResponse(json.dumps({"state": False, "data": dep[1]}))
+        return HttpResponse(json.dumps({"state": False, "data": dep[1]}), content_type='application/json')
 
     status, output = commands.getstatusoutput("/bin/sh %sext_opr.sh install %s" % (webui_path, name))
     if status:
         _extension_log(name, "install", "failed")
         oper_log('error', 'extensions', 'Failed to install the extension %s.' % name)
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to execute the command."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to execute the command."}), content_type='application/json')
     else:
         update_frontend_index_html()
-        return HttpResponse(json.dumps({"state": True, "data": ""}))
+        return HttpResponse(json.dumps({"state": True, "data": ""}), content_type='application/json')
 
 def remove_extension(request, name):
     status, output = commands.getstatusoutput("/bin/sh %sext_opr.sh remove %s" % (webui_path, name))
     if status:
         _extension_log(name, "remove", "failed")
         oper_log('error', 'extensions', 'Failed to remove the extension %s.' % name)
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to execute the command."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to execute the command."}), content_type='application/json')
     else:
         oper_log('info', 'extensions', 'Remove the extension %s successfully.' % name)
         update_frontend_index_html()
-        return HttpResponse(json.dumps({"state": True, "data": ""}))
+        return HttpResponse(json.dumps({"state": True, "data": ""}), content_type='application/json')
 
 def check_extension_dep(ext_name):
     status, output = commands.getstatusoutput("yum deplist %s" % ext_name)
@@ -365,17 +365,17 @@
     if not dep[0]:
         _extension_log(name, "update", "failed")
         oper_log('error', 'extensions', 'Failed to update the extension %s. %s.' % (name, dep[1]))
-        return HttpResponse(json.dumps({"state": False, "data": dep[1]}))
+        return HttpResponse(json.dumps({"state": False, "data": dep[1]}), content_type='application/json')
 
     status, output = commands.getstatusoutput("/bin/sh %sext_opr.sh update %s" % (webui_path, name))
     if status:
         _extension_log(name, "update", "failed")
         oper_log('error', 'extensions', 'Failed to update the extension %s.' % name)
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to execute the command."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to execute the command."}), content_type='application/json')
     else:
         oper_log('info', 'extensions', 'Update the extension %s successfully.' % name)
         update_frontend_index_html()
-        return HttpResponse(json.dumps({"state": True, "data": ""}))
+        return HttpResponse(json.dumps({"state": True, "data": ""}), content_type='application/json')
 
 def get_extensions(request):
     get_sidebar = False
@@ -480,7 +480,7 @@
                         item["updates"] = each["version"]
                         break
 
-    return HttpResponse(json.dumps(extensions_res))
+    return HttpResponse(json.dumps(extensions_res), content_type='application/json')
 
 def check_vpn_license_session():
     session = get_current_session()
@@ -504,11 +504,11 @@
         # check vpn_license_server because this ext should be licensed by AMP license and it's session should > 0
         if each == "vpn_license_server":
             if check_vpn_license_session() == False:
-                return HttpResponse(json.dumps({"state": False, "msg": "Failed to enable extension vpn_license_server because licensed VPN license session is 0."}))
+                return HttpResponse(json.dumps({"state": False, "msg": "Failed to enable extension vpn_license_server because licensed VPN license session is 0."}), content_type='application/json')
         os.system('/bin/sh %s/%s/start.sh'%(extension_path, each if each[:6] != "array_" else each.split("_", 1)[1]))
         oper_log('info', 'extensions', 'Enable the extension %s successfully.' % each)
     update_frontend_index_html()
-    return HttpResponse(json.dumps({"state": True, "msg": ""}))
+    return HttpResponse(json.dumps({"state": True, "msg": ""}), content_type='application/json')
 
 def disable_extension(request, name):
     name = name.split(',')
@@ -516,7 +516,7 @@
         os.system('/bin/sh %s/%s/stop.sh'%(extension_path, each if each[:6] != "array_" else each.split("_", 1)[1]))
         oper_log('info', 'extensions', 'Disable the extension %s successfully.' % each)
     update_frontend_index_html()
-    return HttpResponse(json.dumps(True))
+    return HttpResponse(json.dumps(True), content_type='application/json')
 
 def get_product_device_type(request):
     response = {
@@ -526,7 +526,7 @@
         "DEVICE_TYPE_LIST": DEVICE_TYPE_LIST,
         "DEVICE_STD_LIST":  DEVICE_STD_LIST
     }
-    return HttpResponse(json.dumps(response))
+    return HttpResponse(json.dumps(response), content_type='application/json')
 
 def _extension_log(name, action, result):
     s_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
@@ -553,11 +553,11 @@
                     "result": each[3]
                 }
                 result.append(res)
-        return HttpResponse(json.dumps({"state": True, "data": result}))
+        return HttpResponse(json.dumps({"state": True, "data": result}), content_type='application/json')
     except:
         if db:
             db.close()
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to query the extensions log."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to query the extensions log."}), content_type='application/json')
 
 def _get_operation_log(data):
     offset = int(data["start"])
@@ -609,7 +609,7 @@
 def get_operation_log(request):
     data = json.loads(request.POST.get('post_data', None))
     res = _get_operation_log(data)
-    return HttpResponse(json.dumps(res))
+    return HttpResponse(json.dumps(res), content_type='application/json')
 
 def clear_operation_log(request):
     select_sql = "delete from operation_log"
@@ -617,12 +617,12 @@
         db = DB.get_connected_db()
         data = db.execute_sql(select_sql)
         db.close()
-        return HttpResponse(json.dumps({"state": True, "data": ""}))
+        return HttpResponse(json.dumps({"state": True, "data": ""}), content_type='application/json')
     except:
         raise
         if db:
             db.close()
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to clear the operation log."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to clear the operation log."}), content_type='application/json')
 
 def del_operation_log(request):
     id = request.POST.get('id', None)
@@ -632,12 +632,12 @@
             db = DB.get_connected_db()
             data = db.execute_sql(select_sql)
             db.close()
-            return HttpResponse(json.dumps({"state": True, "data": ""}))
+            return HttpResponse(json.dumps({"state": True, "data": ""}), content_type='application/json')
         except:
             raise
             if db:
                 db.close()
-            return HttpResponse(json.dumps({"state": False, "data": "Failed to delete the operation log."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Failed to delete the operation log."}), content_type='application/json')
 
 def get_user_info(request):
     res = {}
@@ -658,7 +658,7 @@
     model = get_model('cm', ['system', 'user_mgmt', 'UserAuthorization'])
     manager = model.get_manager(session)
     res['root'] = manager.get({'username': session.username}).get_field_dict()['root']
-    return HttpResponse(json.dumps(res))
+    return HttpResponse(json.dumps(res), content_type='application/json')
 
 def get_user_auth(request):
     session = get_current_session()
@@ -668,17 +668,17 @@
         data = db.fetchone(fetchone_sql)
         if data:
             if data[1]:
-                return HttpResponse(json.dumps({"state": True, "data": dict(zip(['username', 'auth'], data))}))
+                return HttpResponse(json.dumps({"state": True, "data": dict(zip(['username', 'auth'], data))}), content_type='application/json')
             else:
                 #no auth info, default allow all auth
-                return HttpResponse(json.dumps({"state": True, "data": {'username':session.username, 'auth':'\"all\"'}}))
+                return HttpResponse(json.dumps({"state": True, "data": {'username':session.username, 'auth':'\"all\"'}}), content_type='application/json')
         else:
             #here means no auth info, like default account(username: array)
-            return HttpResponse(json.dumps({"state": True, "data": {'username':session.username, 'auth':'\"all\"'}}))
+            return HttpResponse(json.dumps({"state": True, "data": {'username':session.username, 'auth':'\"all\"'}}), content_type='application/json')
     except:
         if db:
             db.close()
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to query the user auth."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to query the user auth."}), content_type='application/json')
 
 def get_system_version(request):
     session = get_current_session()
@@ -686,17 +686,17 @@
     output = session.cli.cmd("show version", RegexParser('AMP\s+(?P<version>[^\.]+\.AMP(\.[0-9]+)+)'))
     if output:
         if output["version"]:
-            return HttpResponse(json.dumps({"state": True, "data": output}))
+            return HttpResponse(json.dumps({"state": True, "data": output}), content_type='application/json')
         else:
-            return HttpResponse(json.dumps({"state": False, "data": "Failed to match the AMP version."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Failed to match the AMP version."}), content_type='application/json')
     else:
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to query the AMP version."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to query the AMP version."}), content_type='application/json')
 
 def get_host_name(request):
     session = get_current_session()
     session.cli.set_enable()
     ret = session.cli.cmd('show hostname').strip()
-    return HttpResponse(json.dumps({"hostname": ret}))
+    return HttpResponse(json.dumps({"hostname": ret}), content_type='application/json')
 
 def get_update_version(request):
     available_ext_list = []
@@ -705,20 +705,20 @@
     check_status, check_output = commands.getstatusoutput("yum check-update --disablerepo=* --enablerepo=array")
     if check_status == 256:
         if check_output.find("Timeout")!= -1:
-            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository because connect to the repository timeout."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository because connect to the repository timeout."}), content_type='application/json')
         elif check_output.find("Cannot find a valid baseurl for repo")!= -1:
-            return HttpResponse(json.dumps({"state": False, "data": "Please set yum repository by CLI 'system repo <url>'."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Please set yum repository by CLI 'system repo <url>'."}), content_type='application/json')
         elif check_output.find("Could not resolve host")!= -1:
-            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository. Please check IP nameserver and yum repository URL."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository. Please check IP nameserver and yum repository URL."}), content_type='application/json')
         elif check_output.find("Connection refused")!= -1:
-            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository. Please check the port of yum repository URL."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository. Please check the port of yum repository URL."}), content_type='application/json')
         else:
-            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository."}))
+            return HttpResponse(json.dumps({"state": False, "data": "Failed to connect the yum repository."}), content_type='application/json')
 
     status, output = commands.getstatusoutput("yum --disablerepo=* --enablerepo=array info amp")
 
     if status:
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to check the amp version."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to check the amp version."}), content_type='application/json')
 
     parser = RegexParser('Available Packages\nName\s*:\s*(?P<name>[^\n]*)\n' +
                             'Arch\s*:\s*(?P<arch>[^\n]*)\n' +
@@ -734,22 +734,22 @@
     res = cli_parse(output, parser)
 
     if res and res[0]:
-        return HttpResponse(json.dumps({"state": True, "data": res[0]}))
+        return HttpResponse(json.dumps({"state": True, "data": res[0]}), content_type='application/json')
     else:
-        return HttpResponse(json.dumps({"state": True, "data": []}))
+        return HttpResponse(json.dumps({"state": True, "data": []}), content_type='application/json')
 
 def update_version_by_repo(requset):
     status, output = commands.getstatusoutput("yum update amp -y")
     if status:
         oper_log('error', 'system', 'Faile to update version from repository.')
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to execute the command."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to execute the command."}), content_type='application/json')
     else:
         # update_frontend_index_html()
         session = get_current_session()
         session.cli.set_enable()
         output = session.cli.cmd('system reboot noninteractive')
         oper_log('info', 'system', 'Update version from repository successfully.')
-        return HttpResponse(json.dumps({"state": True, "data": output}))
+        return HttpResponse(json.dumps({"state": True, "data": output}), content_type='application/json')
 
 def get_adc_ssl_cert(requset):
     result = []
@@ -759,7 +759,7 @@
     fetchall_sql = "select name, ip_address, protocol, restapi_port, restapi_username, restapi_password, type, enable_password from device"
     data = db.fetchall(fetchall_sql)
     if not data:
-        return HttpResponse(json.dumps({"state": True, "data": result}))
+        return HttpResponse(json.dumps({"state": True, "data": result}), content_type='application/json')
     db.close()
 
     key = ['device_name', 'ip_address', 'protocol', 'restapi_port', 'restapi_username', 'restapi_password', 'type', 'enable_password']
@@ -841,7 +841,7 @@
                         "exp_time":     ""
                     })
 
-    return HttpResponse(json.dumps({"state": True, "data": result}))
+    return HttpResponse(json.dumps({"state": True, "data": result}), content_type='application/json')
 
 def get_vpn_ssl_cert(requset):
     result = []
@@ -851,7 +851,7 @@
     fetchall_sql = "select name, ip_address, protocol, restapi_port, restapi_username, restapi_password, type, enable_password from device"
     data = db.fetchall(fetchall_sql)
     if not data:
-        return HttpResponse(json.dumps({"state": True, "data": result}))
+        return HttpResponse(json.dumps({"state": True, "data": result}), content_type='application/json')
     db.close()
 
     key = ['device_name', 'ip_address', 'protocol', 'restapi_port', 'restapi_username', 'restapi_password', 'type', 'enable_password']
@@ -916,7 +916,7 @@
                     "exp_time":     ""
                 })
 
-    return HttpResponse(json.dumps({"state": True, "data": result}))
+    return HttpResponse(json.dumps({"state": True, "data": result}), content_type='application/json')
 
 def check_adc_ssl_cert(requset):
     ret = os.popen("/usr/bin/python /ca/bin/check_adc_ssl.py").read()
@@ -949,7 +949,7 @@
             result["data"]["task_name"].append(each["task_name"])
             result["data"]["device_name"].append(each["device_name"])
 
-    return HttpResponse(json.dumps(result))
+    return HttpResponse(json.dumps(result), content_type='application/json')
 
 def clear_schedule_backup_all(request):
     task_name_list = json.loads(request.POST.get('task_name_list', None))
@@ -966,10 +966,10 @@
         mark_expire_all(get_model('cm', ['tasking', 'Tasks']))
         mark_expire_all(get_model('cm', ['configuration', 'config_file', 'ConfigFile']))
         oper_log('info', 'configuration', 'Clear schedule backup all task successfully.')
-        return HttpResponse(json.dumps({"state": True, "data": ""}))
+        return HttpResponse(json.dumps({"state": True, "data": ""}), content_type='application/json')
     else:
         oper_log('error', 'configuration', 'Faile to clear schedule backup all task.')
-        return HttpResponse(json.dumps({"state": False, "data": "Task name list is empty."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Task name list is empty."}), content_type='application/json')
 
 def get_debug_logs(request):
     ret = os.popen("/usr/bin/python /ca/bin/check_adc_ssl.py").read()
@@ -985,7 +985,7 @@
         result["data"]["enable_log"] = True if data['enable'] else False
         result["data"]["log_level"] = str(data['level'])
 
-    return HttpResponse(json.dumps(result))
+    return HttpResponse(json.dumps(result), content_type='application/json')
 
 def update_log_basic(request):
     val = {}
@@ -995,19 +995,19 @@
             val["enable"] = 1 if data["enable_log"] else 0
         else:
             result = {"status":False, "data":"Invalid Post Data"}
-            return HttpResponse(json.dumps(result))
+            return HttpResponse(json.dumps(result), content_type='application/json')
         if "log_level" in data:
             val["level"] = data["log_level"]
         else:
             result = {"status":False, "data":"Invalid Post Data"}
-            return HttpResponse(json.dumps(result))
+            return HttpResponse(json.dumps(result), content_type='application/json')
         ret = set_log_settings(val)
         oper_log('info', 'system', 'Update log basic successfully.')
-        return HttpResponse(json.dumps(ret))
+        return HttpResponse(json.dumps(ret), content_type='application/json')
     else:
         oper_log('error', 'system', 'Failed to update log basic.')
         result = {"status":False, "data":"Invalid Post Data"}
-        return HttpResponse(json.dumps(result))
+        return HttpResponse(json.dumps(result), content_type='application/json')
 
 def get_log_host(request):
     result = {
@@ -1021,35 +1021,35 @@
             "port":val[1],
             "protocol":val[2]
         })
-    return HttpResponse(json.dumps(result))
+    return HttpResponse(json.dumps(result), content_type='application/json')
 
 def add_log_host(request):
     data = json.loads(request.POST.get('post_data', None))
     if data:
         ret = log_host_add([data["host_ip"], int(data["port"]), int(data["protocol"])])
         oper_log('info', 'system', 'Add log basic successfully.')
-        return HttpResponse(json.dumps(ret))
+        return HttpResponse(json.dumps(ret), content_type='application/json')
     else:
         oper_log('error', 'system', 'Failed to add log basic.')
         result = {"status":False, "data":"Invalid Post Data"}
-        return HttpResponse(json.dumps(result))
+        return HttpResponse(json.dumps(result), content_type='application/json')
 
 def delete_log_host(request):
     data = json.loads(request.POST.get('post_data', None))
     if data:
         ret = log_host_del([data["host_ip"], int(data["port"]), int(data["protocol"])])
         oper_log('info', 'system', 'Delete log basic successfully.')
-        return HttpResponse(json.dumps(ret))
+        return HttpResponse(json.dumps(ret), content_type='application/json')
     else:
         result = {"status":False, "data":"Invalid Post Data"}
         oper_log('error', 'system', 'Failed to delete log basic.')
-        return HttpResponse(json.dumps(result))
+        return HttpResponse(json.dumps(result), content_type='application/json')
 
 def get_license_expire(request):
     session = get_current_session()
     res = check_license_expire(session)
 
-    return HttpResponse(json.dumps(res))
+    return HttpResponse(json.dumps(res), content_type='application/json')
 
 def _get_task_pagination(data):
     offset = int(data["start"])
@@ -1087,7 +1087,7 @@
 def get_task_pagination(request):
     data = json.loads(request.POST.get('post_data', None))
     res = _get_task_pagination(data)
-    return HttpResponse(json.dumps(res))
+    return HttpResponse(json.dumps(res), content_type='application/json')
 
 def get_task_and_log(request):
     data = json.loads(request.POST.get('post_data', None))
@@ -1097,7 +1097,7 @@
     log = _get_operation_log({"start": offset, "number": limit, "search": {}, "sort_predicate": "time", "sort_reverse": ""})
     task = _get_task_pagination({"start": offset, "number": limit, "search": {}})
 
-    return HttpResponse(json.dumps({"log": log, "task": task}))
+    return HttpResponse(json.dumps({"log": log, "task": task}), content_type='application/json')
 
 def get_task_by_name(request):
     post_data = json.loads(request.POST.get('post_data', None))
@@ -1124,7 +1124,7 @@
             date_res.append(each)
     res = sorted(date_res, key=lambda x: x["next_run_time"], reverse=True) + interval_res
 
-    return HttpResponse(json.dumps(res))
+    return HttpResponse(json.dumps(res), content_type='application/json')
 
 def get_config_template_key(request):
     sql_res = None
@@ -1136,11 +1136,11 @@
     except:
         if db:
             db.close()
-        return HttpResponse(json.dumps([]))
+        return HttpResponse(json.dumps([]), content_type='application/json')
     key = ["key", "default_value", "description"]
     result = [dict(zip(key, each)) for each in sql_res]
 
-    return HttpResponse(json.dumps(result))
+    return HttpResponse(json.dumps(result), content_type='application/json')
 
 def add_config_template_key(request):
     data = json.loads(request.POST.get('post_data', None))
@@ -1158,7 +1158,7 @@
             db.close()
         res["msg"] = "Failed to insert into table config_template."
 
-    return HttpResponse(json.dumps(res))
+    return HttpResponse(json.dumps(res), content_type='application/json')
 
 def delete_config_template_key(request):
     data = json.loads(request.POST.get('post_data', None))
@@ -1176,12 +1176,11 @@
             db.close()
         res["msg"] = "Failed to delete this key from table config_template."
 
-    return HttpResponse(json.dumps(res))
+    return HttpResponse(json.dumps(res), content_type='application/json')
 
 def edit_config_template_key(request):
     data = json.loads(request.POST.get('post_data', None))
     res = {"state": False, "msg": ""}
-
     try:
         db = DB.get_connected_db()
         select_sql = "SELECT default_value FROM config_template WHERE key = '%s'" % data["key"]
@@ -1198,7 +1197,7 @@
             db.close()
         res["msg"] = "Failed to update table config_template."
 
-    return HttpResponse(json.dumps(res))
+    return HttpResponse(json.dumps(res), content_type='application/json')
 
 def edit_default_tmpvalue(key, value, old_value):
     db = DB.get_connected_db()
@@ -1238,7 +1237,7 @@
     except:
         if db:
             db.close()
-        return HttpResponse(json.dumps({"key_list": [], "value_list": []}))
+        return HttpResponse(json.dumps({"key_list": [], "value_list": []}), content_type='application/json')
     key = ["id", "device_ip", "key", "value"]
     result = [dict(zip(key, each)) for each in sql_res]
 
@@ -1267,7 +1266,7 @@
         "key_list": key_list,
         "value_list": val_list
     }
-    return HttpResponse(json.dumps(resp))
+    return HttpResponse(json.dumps(resp), content_type='application/json')
 
 def edit_config_template_default_value(request):
     data = json.loads(request.POST.get('post_data', None))
@@ -1286,9 +1285,9 @@
     except:
         if db:
             db.close()
-        return HttpResponse(json.dumps({"state": False, "msg": "Failed to edit config template deafult value."}))
+        return HttpResponse(json.dumps({"state": False, "msg": "Failed to edit config template deafult value."}), content_type='application/json')
 
-    return HttpResponse(json.dumps({"state": True, "msg": ""}))
+    return HttpResponse(json.dumps({"state": True, "msg": ""}), content_type='application/json')
 
 def get_device_ha_list(request):
     resp = {
@@ -1343,7 +1342,7 @@
             resp["error_msg"] = 'Get device ha genetal settings failed. %s\n' % str(e)
 
 
-    return HttpResponse(json.dumps(resp))
+    return HttpResponse(json.dumps(resp), content_type='application/json')
 
 def get_device_ha_units(request):
     device_name = json.loads(request.POST.get('device_name', None))
@@ -1371,7 +1370,7 @@
     except Exception, e:
         err_msg = 'Failed to get the device<%s> ha units. %s' % (device_info['ip_address'], str(e))
 
-    return HttpResponse(json.dumps({"state": state, "data": res, "msg": err_msg}))
+    return HttpResponse(json.dumps({"state": state, "data": res, "msg": err_msg}), content_type='application/json')
 
 def get_device_ha_groups(request):
     device_name = json.loads(request.POST.get('device_name', None))
@@ -1399,7 +1398,7 @@
     except Exception, e:
         err_msg = 'Failed to get the device<%s> ha groups. %s' % (device_info['ip_address'], str(e))
 
-    return HttpResponse(json.dumps({"state": state, "data": res, "msg": err_msg}))
+    return HttpResponse(json.dumps({"state": state, "data": res, "msg": err_msg}), content_type='application/json')
 
 def swith_ha_group(request):
     post_data = json.loads(request.POST.get('post_data', None))
@@ -1425,7 +1424,7 @@
     except Exception, e:
         err_msg = 'Failed to switch device<%s> group. %s' % (device_info['ip_address'], str(e))
 
-    return HttpResponse(json.dumps({"state": state, "msg": err_msg}))
+    return HttpResponse(json.dumps({"state": state, "msg": err_msg}), content_type='application/json')
 
 def import_license_key(request):
     data = json.loads(request.POST.get('post_data', None))
@@ -1437,9 +1436,9 @@
         if output.lower().find('failed') != -1:
             result = output
     if result:
-        return HttpResponse(json.dumps({"state": False, "data": result}))
+        return HttpResponse(json.dumps({"state": False, "data": result}), content_type='application/json')
     else:
-        return HttpResponse(json.dumps({"state": True, "data": ""}))
+        return HttpResponse(json.dumps({"state": True, "data": ""}), content_type='application/json')
 
 @csrf_exempt
 def device_change_result(request):
@@ -1454,7 +1453,7 @@
             db.execute_sql(insert_sql)
     db.close()
 
-    return HttpResponse(json.dumps({"status": True}))
+    return HttpResponse(json.dumps({"status": True}), content_type='application/json')
 
 def get_device_change_log(request):
     device_id = request.POST["device_id"]
@@ -1467,12 +1466,12 @@
     except:
         if db:
             db.close()
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to fetch the device change log."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to fetch the device change log."}), content_type='application/json')
 
     key = ['device_id', 'result', 'msg', 'field', 'old_value', 'new_value', 'change_time']
     result = [dict(zip(key, each)) for each in data]
 
-    return HttpResponse(json.dumps({"state": True, "data": result}))
+    return HttpResponse(json.dumps({"state": True, "data": result}), content_type='application/json')
 
 def clear_device_change_log(request):
     device_id = request.POST["device_id"]
@@ -1485,9 +1484,9 @@
     except:
         if db:
             db.close()
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to clear the device change log."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to clear the device change log."}), content_type='application/json')
 
-    return HttpResponse(json.dumps({"state": True, "data": ""}))
+    return HttpResponse(json.dumps({"state": True, "data": ""}), content_type='application/json')
 
 def export_adc_ssl_cert_file(request):
     device_name = request.POST["device_name"]
@@ -1503,7 +1502,7 @@
         local_ip = get_ip_address(network_card)
     except Exception, e:
         description = 'Local network settings are abnormal. Please configuare management interface by CLI "system management intertface <port_name>".'
-        return HttpResponse(json.dumps({"state": False, "data": description}))
+        return HttpResponse(json.dumps({"state": False, "data": description}), content_type='application/json')
     device_info = get_rest_info_from_device(device_name)[0]
     auth_str = base64.b64encode("%s:%s" % (device_info['restapi_username'], device_info['restapi_password']))
     file_path = host_name
@@ -1513,16 +1512,16 @@
     try:
         os.popen(cmd).read()
     except:
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to export the backup file."}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to export the backup file."}), content_type='application/json')
     if os.path.exists("/ca/config/backup/%s" % file_name):
-        return HttpResponse(json.dumps({"state": True, "data": local_ip}))
+        return HttpResponse(json.dumps({"state": True, "data": local_ip}), content_type='application/json')
     else:
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to export the backup file"}))
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to export the backup file"}), content_type='application/json')
 
 def remove_adc_ssl_cert_file(request):
     file_name = request.POST['file_name']
     try:
         os.popen('rm -rf /ca/config/backup/%s' % (file_name)).read()
     except:
-        return HttpResponse(json.dumps({"state": False, "data": "Failed to remove the backup file."}))
-    return HttpResponse(json.dumps({"state": True, "data": ""}))
\ No newline at end of file
+        return HttpResponse(json.dumps({"state": False, "data": "Failed to remove the backup file."}), content_type='application/json')
+    return HttpResponse(json.dumps({"state": True, "data": ""}), content_type='application/json')
Index: /branches/amp_3_6/src/webui/webui/htdocs/new/src/hive/router.py
===================================================================
--- /branches/amp_3_6/src/webui/webui/htdocs/new/src/hive/router.py	(revision 2324)
+++ /branches/amp_3_6/src/webui/webui/htdocs/new/src/hive/router.py	(working copy)
@@ -281,7 +281,7 @@
                         response.status_code = 404
                     else:
                         result = handle_func.func(request, **handle_func.kwargs)
-                        response = HttpResponse(json.dumps(result))
+                        response = HttpResponse(json.dumps(result), content_type='application/json')
                         # log
                         user = sess.username
                         ip = request.META["REMOTE_ADDR"]
@@ -316,7 +316,7 @@
         rst = os.popen("ping -t 3 " + ip + " | grep received").read()
         tmp = {'ip': ip, 'send': rst.split()[0], 'receive': rst.split()[3]}
         result.append(tmp)
-    return HttpResponse(json.dumps(result))
+    return HttpResponse(json.dumps(result), content_type='application/json')
 
 
 def hive_storage_router(request, app):
@@ -348,7 +348,7 @@
 
 def is_eng_mode(request):
     sess = get_current_session()
-    return HttpResponse(json.dumps(sess.engmode))
+    return HttpResponse(json.dumps(sess.engmode), content_type='application/json')
 
 
 def hive_eng_switch_router(request):
@@ -367,7 +367,7 @@
             'state': False,
             'msg': 'You are not super admin user, entering eng mode is not allowed.'
         }
-    return HttpResponse(json.dumps(result))
+    return HttpResponse(json.dumps(result), content_type='application/json')
 
 
 def hive_eng_mode_router(request, action, path):
@@ -402,7 +402,7 @@
 
 def hive_pref_get(request, key):
     sess = get_current_session()
-    return HttpResponse(json.dumps(sess.pref.get(key)))
+    return HttpResponse(json.dumps(sess.pref.get(key)), content_type='application/json')
 
 
 def hive_pref_set(request, key):
@@ -419,9 +419,9 @@
         value = None
 
     if 'restore' in request.GET or 'restore' in request.POST:
-        return HttpResponse(json.dumps(sess.pref.restore(key)))
+        return HttpResponse(json.dumps(sess.pref.restore(key)), content_type='application/json')
     else:
-        return HttpResponse(json.dumps(sess.pref.set(key, value)))
+        return HttpResponse(json.dumps(sess.pref.set(key, value)), content_type='application/json')
 
 
 def CacheClean(request):
@@ -705,7 +705,7 @@
 
         resp['message'] = 'success'
 
-    response = HttpResponse(json.dumps(resp))
+    response = HttpResponse(json.dumps(resp), content_type='application/json')
     response.status_code = 200
     return response
 
@@ -715,7 +715,7 @@
     file_name = handle_uploaded_file(file)
 
     if file_name.split('.')[-1] != 'csv':
-        return HttpResponse(json.dumps({'is_success': False, 'errorInfo': 'Invalid File Format !'}))
+        return HttpResponse(json.dumps({'is_success': False, 'errorInfo': 'Invalid File Format !'}), content_type='application/json')
 
     global FILE_CONTENT
     FILE_CONTENT = []
@@ -729,7 +729,7 @@
                     else:
                         FILE_CONTENT.append(line)
     except csv.Error as e:
-        return HttpResponse(json.dumps({'is_success': False, 'errorInfo': unicode(e)}))
+        return HttpResponse(json.dumps({'is_success': False, 'errorInfo': unicode(e)}), content_type='application/json')
 
     rsBlocks = {}
     i = 0
@@ -747,7 +747,7 @@
 
     with open(os.path.join(an_settings.CM_ConfigFile_PATH, "rs_block.json"), "w") as dump_f:
         json.dump(rsBlocks, dump_f, ensure_ascii=False)
-    return HttpResponse(json.dumps({'is_success': True}))
+    return HttpResponse(json.dumps({'is_success': True}), content_type='application/json')
 
 # example: enable service
 # post_data=[{'service_name':'a', 'device_name':'test', 'enable':True}]
@@ -932,7 +932,7 @@
                                     resp[each['name']]['error'].append(rest_body['CLI Output'])
                 else:
                     pass
-    response = HttpResponse(json.dumps(resp))
+    response = HttpResponse(json.dumps(resp), content_type='application/json')
     response.status_code = 200
     return response
 
@@ -1152,7 +1152,7 @@
     file_name = handle_uploaded_file(file)
 
     if file_name.split('.')[-1] != 'csv':
-        return HttpResponse(json.dumps({'is_success': False, 'errorInfo': 'Invalid File Format !'}))
+        return HttpResponse(json.dumps({'is_success': False, 'errorInfo': 'Invalid File Format !'}), content_type='application/json')
 
     global FILE_CONTENT
     FILE_CONTENT = []
@@ -1166,7 +1166,7 @@
                     else:
                         FILE_CONTENT.append(line)
     except csv.Error as e:
-        return HttpResponse(json.dumps({'is_success': False, 'errorInfo': unicode(e)}))
+        return HttpResponse(json.dumps({'is_success': False, 'errorInfo': unicode(e)}), content_type='application/json')
 
     if len(FILE_CONTENT[0]) > 1:
         FILE_CONTENT[0] = [FILE_CONTENT[0][0]]
@@ -1181,7 +1181,7 @@
         except ValidationError as e:
             raise ModelQueryException(e)
         except ModelQueryException as e:
-            return HttpResponse(json.dumps({'is_success': False, 'errorInfo': unicode(e)}))
+            return HttpResponse(json.dumps({'is_success': False, 'errorInfo': unicode(e)}), content_type='application/json')
     else:
         model_list = model_path.split("+")
         for each in model_list:
@@ -1191,9 +1191,9 @@
             except ValidationError as e:
                 raise ModelQueryException(e)
             except ModelQueryException as e:
-                return HttpResponse(json.dumps({'is_success': False, 'errorInfo': unicode(e)}))
+                return HttpResponse(json.dumps({'is_success': False, 'errorInfo': unicode(e)}), content_type='application/json')
 
-    return HttpResponse(json.dumps({'is_success': True}))
+    return HttpResponse(json.dumps({'is_success': True}), content_type='application/json')
 
 
 def import_handler(model, sess, asso_info=None):
@@ -1416,7 +1416,7 @@
 
     file = upload_receive(request)
     if file.name.split('.')[-1] != 'setting':
-        return HttpResponse(json.dumps({'is_success': False, 'errorInfo': 'Invalid File Format !'}))
+        return HttpResponse(json.dumps({'is_success': False, 'errorInfo': 'Invalid File Format !'}), content_type='application/json')
     try:
         path = FILE_UPLOAD_DIR
         if not os.path.exists(path):
@@ -1468,9 +1468,9 @@
                     for item in data:
                         L.add_lock(item[0])
                     oper_log('info', 'system', 'Upload setting successful.')
-                    return HttpResponse(json.dumps({'is_success': clear_cache_all()}))
+                    return HttpResponse(json.dumps({'is_success': clear_cache_all()}), content_type='application/json')
     oper_log('error', 'system', 'Setting File upload fail. Version mismatch.')
-    return HttpResponse(json.dumps({'is_success': False, 'errorInfo': 'Setting File and device version do not match!'}))
+    return HttpResponse(json.dumps({'is_success': False, 'errorInfo': 'Setting File and device version do not match!'}), content_type='application/json')
 
 
 def get_ha_status(request):
@@ -1492,9 +1492,9 @@
                 obj["opposite_state"] = tmp[4]
         # obj = json.loads(res)
     except Exception as e:
-        return HttpResponse(json.dumps({'is_success': False, 'message': res}))
+        return HttpResponse(json.dumps({'is_success': False, 'message': res}), content_type='application/json')
     else:
-        return HttpResponse(json.dumps({'is_success': True, 'data': obj}))
+        return HttpResponse(json.dumps({'is_success': True, 'data': obj}), content_type='application/json')
 
 
 def get_ha_setting(request):
@@ -1507,9 +1507,9 @@
             if len(tmp) >= 4:
                 config["enabled"] = (tmp[1] == "on")
     except Exception as e:
-        return HttpResponse(json.dumps({'is_success': False, 'message': 'Internal Error.'}))
+        return HttpResponse(json.dumps({'is_success': False, 'message': 'Internal Error.'}), content_type='application/json')
     else:
-        return HttpResponse(json.dumps({'is_success': True, 'data': config}))
+        return HttpResponse(json.dumps({'is_success': True, 'data': config}), content_type='application/json')
 
 
 LOGLEVEL = {
@@ -1542,9 +1542,9 @@
             })
         rst.reverse()
     except Exception as e:
-        return HttpResponse(json.dumps({'is_success': True, 'data': []}))
+        return HttpResponse(json.dumps({'is_success': True, 'data': []}), content_type='application/json')
     else:
-        return HttpResponse(json.dumps({'is_success': True, 'data': rst}))
+        return HttpResponse(json.dumps({'is_success': True, 'data': rst}), content_type='application/json')
 
 
 def update_ha_setting(request):
@@ -1577,23 +1577,23 @@
                     res = "HA dsiable success"
             time.sleep(3)
         else:
-            return HttpResponse(json.dumps({'is_success': False, 'message': "please close HA first"}))
+            return HttpResponse(json.dumps({'is_success': False, 'message': "please close HA first"}), content_type='application/json')
     except Exception as e:
-        return HttpResponse(json.dumps({'is_success': False, 'message': "Internal Error."}))
+        return HttpResponse(json.dumps({'is_success': False, 'message': "Internal Error."}), content_type='application/json')
     else:
         if "success" in res:
-            return HttpResponse(json.dumps({'is_success': True, 'message': res}))
+            return HttpResponse(json.dumps({'is_success': True, 'message': res}), content_type='application/json')
         else:
-            return HttpResponse(json.dumps({'is_success': False, 'message': res}))
+            return HttpResponse(json.dumps({'is_success': False, 'message': res}), content_type='application/json')
 
 
 def delete_ha_setting(request):
     try:
         res = commands.getoutput(djproject.an_settings.HA_BIN_PATH + ' clear')
     except Exception as e:
-        return HttpResponse(json.dumps({'is_success': False, 'message': "Internal Error."}))
+        return HttpResponse(json.dumps({'is_success': False, 'message': "Internal Error."}), content_type='application/json')
     else:
         if "close HA" in res:
-            return HttpResponse(json.dumps({'is_success': False, 'message': res}))
+            return HttpResponse(json.dumps({'is_success': False, 'message': res}), content_type='application/json')
         else:
-            return HttpResponse(json.dumps({'is_success': True, 'message': res}))
+            return HttpResponse(json.dumps({'is_success': True, 'message': res}), content_type='application/json')
Index: /branches/amp_3_6/src/webui/webui/htdocs/new/src/hive/session.py
===================================================================
--- /branches/amp_3_6/src/webui/webui/htdocs/new/src/hive/session.py	(revision 2324)
+++ /branches/amp_3_6/src/webui/webui/htdocs/new/src/hive/session.py	(working copy)
@@ -232,9 +232,9 @@
         if 'hive_sess' in request.COOKIES:
             session = ANSession.find_session_by_id(request.COOKIES['hive_sess'])
         if session:
-            return HttpResponse(json.dumps({'error_code':0, 'msg': 'You have logged in.'}))
+            return HttpResponse(json.dumps({'error_code':0, 'msg': 'You have logged in.'}), content_type='application/json')
         else:
-            return HttpResponse(json.dumps({'error_code':1, 'msg': 'You need to log in.'}))
+            return HttpResponse(json.dumps({'error_code':1, 'msg': 'You need to log in.'}), content_type='application/json')
         
     elif request.method == 'POST':
         session = None
@@ -249,7 +249,7 @@
                 password = session._password
             else:
                 oper_log('error', 'login', 'User <%s> failed to login.' % username)
-                return HttpResponse(json.dumps({'error_code':1, 'msg': 'Invalid request.'}))
+                return HttpResponse(json.dumps({'error_code':1, 'msg': 'Invalid request.'}), content_type='application/json')
 
         ret = getattr(auth, 'auth_'+current_app())(username, password)
         if ret:
@@ -276,12 +276,12 @@
                     if session:
                         session.logout()
                     _thread_locals.session = None
-                    response = HttpResponse(json.dumps({'error_code': 3, 'msg': 'License has been expired.'}))
+                    response = HttpResponse(json.dumps({'error_code': 3, 'msg': 'License has been expired.'}), content_type='application/json')
                     oper_log('error', 'login', 'User <%s> failed to login because the license has been expired.' % username)
                     return response
                 send_notification('success', 'User logged in.', session=session)
 
-                response = HttpResponse(json.dumps({'error_code':0, 'hive_key':ret, 'user_info':user_info, 'msg': 'Logging in successfully.', 'check_license': check_license}))
+                response = HttpResponse(json.dumps({'error_code':0, 'hive_key':ret, 'user_info':user_info, 'msg': 'Logging in successfully.', 'check_license': check_license}), content_type='application/json')
                 response.set_cookie('django_language', session.pref.get_default_lang(), secure=True)
                 response.set_cookie('hive_sess', session.sessid, secure=True)
                 # response.set_cookie('ComposerUICookie', 'f1f713c9e000f5d3f280adbd124df4f5')
@@ -296,7 +296,7 @@
                    error_msg = 'Invalid enable password'
                 else:
                    error_msg = ''
-                response = HttpResponse(json.dumps({'error_code':-1, 'msg': error_msg}))
+                response = HttpResponse(json.dumps({'error_code':-1, 'msg': error_msg}), content_type='application/json')
                 response.set_cookie('django_language', session.pref.get_default_lang(), secure=True)
                 response.set_cookie('hive_sess', session.sessid, secure=True)
                 oper_log('error', 'login', 'User <%s> failed to login with an invalid enable password.' % username)
@@ -308,10 +308,10 @@
             _thread_locals.session = None
             send_notification('error', '%s is trying to login with an invalid password.' % username)
             oper_log('error', 'login', 'User <%s> failed to login with an invalid password.' % username)
-            return HttpResponse(json.dumps({'error_code':2, 'msg': 'Invalid username or password.'}))
+            return HttpResponse(json.dumps({'error_code':2, 'msg': 'Invalid username or password.'}), content_type='application/json')
 
 def app_logout_handler(request):
-    response = HttpResponse(json.dumps({'error_code':0, 'msg': 'Loging out successfully.'}))
+    response = HttpResponse(json.dumps({'error_code':0, 'msg': 'Loging out successfully.'}), content_type='application/json')
     if 'hive_sess' in request.COOKIES:
         sess = ANSession.find_session_by_id(request.COOKIES['hive_sess'])
         send_notification('info', 'User logged out.')
