While running the code under classic mode works fine.....but it fails when runnnig under integrated mode.
Here is the code: -
function callAjax(method, request, callback) {
http = newHTTP();
http.open('POST', url, true);
setupHeaders(http, method);
http.onreadystatechange = function () { http_onreadystatechange(http, callback); }
http.send(JSON.stringify(request));
return request.id;
}
function newHTTP() {
if (typeof (window) != 'undefined' && window.XMLHttpRequest)
return new XMLHttpRequest(); /* IE7, Safari 1.2, Mozilla 1.0/Firefox, and Netscape 7 */
else
return new ActiveXObject('Microsoft.XMLHTTP'); /* WSH and IE 5 to IE 6 */
}
function http_onreadystatechange(sender, callback) {
if (sender.readyState == /* complete */4) {
var response = sender.status == 200 ?
JSON.parse(sender.responseText) : {};
response.xmlHTTP = sender;
callback(response);
}
if (sender.readyState == 2 || sender.readyState == 3) {
}
}
function setupHeaders(http, method) {
http.setRequestHeader('Content-Type', 'text/plain; charset=utf-8');
http.setRequestHeader('X-JSON-RPC', method);
}
It returns the following response when running under classic mode: -
"{"id":0,"result":{"serverInfo":{"totalCount":2,"serviceName":"FluorineFx.PageableResult","version":1,"cursor":1,"id":null,"columnNames":["ApplicationId","ApplicationParentID","ParentApp","ChildApp"],"initialData":[[1158,1153,"Apps","App_Application1"],[3159,3161,"Databases","DB_Database1"]]}}}"
Whereas, it returns following when running under integrated mode : -
"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
</title></head>
<body>
<form method="post" action="xxxxx...." id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEXXXXLTE2MTY2ODcyMjlkZLGuNeIyaZaly9gcTafYavVTQG2payFqxE2OaB+1PjxT" />
</div>
<div>
</div>
</form>
</body>
</html>
"
Due to above response it fails inside http_onreadystatechange() method in this line: -
var response = sender.status == 200 ?
JSON.parse(sender.responseText) : {};
My issue is that why does it returns weird response when running under integrated mode?
Related
I am writing a simple PHP/JS script to determine and manage status of all windows terminal servers.
As you know the access via WMI is very slow so I want AJAX to show the progress of each server when he is looping every server.
The code works as expected in firefox.
In chrome the code works, but does not show a status while looping. After the loop the content is displayed.
In IE11 the code does not work. Checking by alerts IE calls both functions and also gets in if statement creating requestobject.
Can somebody help me to get IE working and Chrome showing status?
Thank you for your help.
My code looks like this:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="stylesheet" type="text/css" href="tsmanager.css">
<script type="text/javascript">
function refreshall()
{
var table = document.getElementById("terminalservers");
for (var i = 0, row; row = table.rows[i]; i++)
{
var sComputer = row.id;
if (sComputer != "")
{
setTimeout(refresh(sComputer), 2000);
setTimeout(document.getElementById("turn").innerHTML = sComputer, 2000);
}
}
}
function refresh(sComputer)
{
if (window.XMLHttpRequest)
{
req = new XMLHttpRequest();
}
else
{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.onreadystatechange = function()
{
if (req.readyState == 4 && req.status == 200)
{
document.getElementById(sComputer).innerHTML = req.responseText;
}
}
req.open("GET", "serverrequest.php?name="+sComputer, false);
req.send();
}
</script>
</head>
<body>
<table id="terminalservers">
/* some table content with row id=servername */
</table>
<button onclick="refreshall()">alle</button>
<br><span id="turn">leer</span>
</body>
</html>
I would suggest you look at using jQuery - it provides simple and robust cross-browser support for AJAX and results in much more readable code on all fronts.
It works for Firefox but not for Chrome and IE.
I try it on local.
I get error on httpObj.send( null ); line.
How can i handle this problem ?
HTML File
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>XML READ</title>
<script type="text/javascript">
//---
function GetXml() {
if (window.XMLHttpRequest) {
var httpObj = new XMLHttpRequest();
} else {
var httpObj = new ActiveXObject("Microsoft.XMLHTTP");
}
httpObj.open("GET", "notification.xml", false);
// Error Starts Here
httpObj.send( null );
var xmlDocument = httpObj.responseXML;
var xmlEl = xmlDocument.getElementsByTagName("haber");
//--
for (i = 0; i < xmlEl.length; i++) {
for (j = 0; j < xmlEl[i].childNodes.length; j++) {
if (xmlEl[i].childNodes[j].nodeType != 1) {
continue;
}
alert(xmlEl[i].childNodes[j].firstChild.nodeValue);
}
}
}
</script>
</head>
<body onload="GetXml()">
</body>
</html>
XML File
<?xml version="1.0" encoding="utf-8" ?>
<notifications>
<notification id="001">
<name>First</name>
</notification>
<notification id="002">
<name>Second</name>
</notification>
</notifications>
Your code works in chrome and IE if you replace
xmlDocument.getElementsByTagName("haber");
with
xmlDocument.getElementsByTagName("notification");
Also when you say I try it on local make sure that it is hosted in a server e.g. apache and the server is running
Old comment:
check this link about browser combatibility and correct ajax call
http://www.w3schools.com/ajax/ajax_xmlfile.asp
I am new in learning AJAX and stuck in the first program. Tried to debug but unable to do so.
Below is my code snippet
----------input-ajax.html-------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>HTML PAGE</title>
<script type="text/javascript">
var request=null;
function createRequest(){
try{
request= new XMLHttpRequest();
)catch(e){
try{
request=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
request= new ActiveXObject("Microsoft.XMLHTTP");
}catch(failed){
request=null;
}
}
}
if(request==null){
alert("Error Creating Request Object");
}
}
function getName(){
alert("getname called");
createRequest();
var url = "showName-ajax.jsp";
request.open("POST",url,true);
alert("before");
request.onreadystatechange = updatePage;
alert("after");
request.send(null);
}
function updatePage(){
//var newName= request.getResponseHeader("r1");
var newName= request.responseText;
var name1 = document.getElementById("name");
replaceText(name1,newName);
}
function replaceText(el, text) {
if (el != null) {
clearText(el);
var newNode = document.createTextNode(text);
el.appendChild(newNode);
}
}
function clearText(el) {
if (el != null) {
if (el.childNodes) {
for (var i = 0; i < el.childNodes.length; i++) {
var childNode = el.childNodes[i];
el.removeChild(childNode);
}
}
}
}
</script>
</head>
<body>
<h1>WELCOME <span id="name"> GUEST</span></h1>
<form method="POST">
<input type="text" name="t1">
<input type="button" value="Show Name" onclick="getName();"/>
</form>
</body>
</html>
----------showName-ajax.jsp------------
<%
String s1=request.getParameter("t1");
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(s1); // Write response body.
%>
But When I run the program (click on the button) nothing happens. Even the alert message that getName function is called does not appear. PLEASE HELP!!!!
Typo:
)catch(e){
should be
}catch(e){
This would show up as an error in the console of your browser. Be sure to always check that first if things don't work like they should.
You have a ) instead of a } here:
try{
request= new XMLHttpRequest();
)catch(e){
So your function never gets defined.
change )catch(e){ to }catch(e){
but
why are you creating request object everytime on button click?
you just need to call "createRequest()" only once on page load event.
Goal:
To enable display a pop up if validation was correct or failure.
Problem:
Somehow it doesn't want to make a
validation of the password.
I tried using Firebug but It can't make debugging for this code for some reason.
Before creating this validation I had this code before:
function validation() {
if (mittXHRobjekt.readyState == 4)
alert("Okey");
}
After doing more improvement by adding validation, The readyState don't work properly. All I did was to improve the function validation only.
The current code with validation is:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled 1</title>
<script type="text/javascript">
var mittXHRobjekt = null;
function skapaXHRobjekt() {
try {
XHRobjekt = new XMLHttpRequest();
} catch (err1) {
try {
XHRobjekt = new ActiveXObject("Microsoft.XMLHTTP");
} catch (err2) {
try {
XHRobjekt = new ActiveXObject("Msxml2.XMLHTTP");
} catch (err3) {
XHRobjekt = false;
}
}
}
return XHRobjekt;
}
function validation() {
if (mittXHRobjekt.readyState == 4) {
if (window.document.frmPassword.txtPassword.value == mittXHRobjekt.responseText) {
alert("Correct password");
}
else {
alert("Wrong password");
}
}
alert("no ready state 4");
}
function test(url) {
mittXHRobjekt = skapaXHRobjekt();
if (mittXHRobjekt) {
mittXHRobjekt.onreadystatechange = validation;
mittXHRobjekt.open("GET", url);
mittXHRobjekt.send(null);
}
}
</script>
</head>
<body>
<form id="frmPassword">
<input name="txtPassword" type="password" />
<input name="btnPassword" type="button" value="Evaluation" onclick="test('password.txt')" />
</form>
</body>
</html>
xmlHttp.responseText comes empty, what is the problem and solution?
default.aspx :
<%# Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="xmlHttpOrnek._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<script type="text/javascript">
var xmlHttp;
function GetXmlHttpObject() {
var xmlHttp = null;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
}
catch (e) {
// Internet Explorer
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
//--------------------------
function callAjaxFunc(val) {
xmlHttp = GetXmlHttpObject();
if (xmlHttp == null) {
alert("Browser does not support HTTP Request");
return;
}
//you can provide your page URL
var url = "Default.aspx";
url = url + "?kod=" + val;
//state change event-this will occur ass soon as response comes from the url
xmlHttp.onreadystatechange = stateChanged;
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
}
function stateChanged() {
if (xmlHttp.readyState == 4)
{ //Display contents
var xmlResponse = xmlHttp.responseText;
if (xmlResponse != '') {
var inputMessage = document.getElementById('txb');
inputMessage.value = xmlResponse.toString();
alert(xmlResponse);
}
}
}
</script>
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:textbox ID="txb" runat="server"></asp:textbox>
<asp:Button ID="btn" runat="server" Text="bas" OnClientClick="callAjaxFunc('y')" />
</form>
</body>
</html>
default.aspx.cs:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
namespace xmlHttpOrnek
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string d = Request.QueryString["kod"];
if (Request.QueryString["kod"] == "y")
{
Response.Write("Başarılı!");
Response.End();
}
}
}
}
I created another project with copy paste of this one; everything is same, but the second one worked. I'm surprised.