2012-07-09 43 views
1

寻找一些帮助,使用XMLHttpRequest将以下内容从jquery ajax转换为javascript?

$.ajax({ 
    url: 'api/dev/blah?id=4F',   
    type: 'GET', 
    beforeSend: function(req) { 
     req.setRequestHeader("Accept", "application/xml"); 
    }, 
    success: function (result) { 
     alert('success'); 
     // Parse xml here... 
    }, 
    error: function() { 
     alert('error'); 
} 
}); 

我已经试过类似的东西到这一点,但我无法看到提琴手发送的请求,暗示无响应或错误(不XMLHttpRequest的精明):

function junk() { 
    var request = new XMLHttpRequest(); 
    request.addEventListener('load', successCallback, false); 

    request.open("GET", 'api/dev/blah?id=4F', true); 
    request.setRequestHeader("Accept","application/xml"); 
    request.setRequestHeader("Content-Type", "application/xml"); 
    request.send(); 
} 

function successCallback(data) { 
    alert('success'); 
} 
+2

你能解释一下你需要什么特别的帮助?你是否得到错误等? – dstarh 2012-07-09 21:26:12

回答

1

Eloquent JavaScript - chapter 14

function makeHttpObject() { 
    try {return new XMLHttpRequest();} 
    catch (error) {} 
    try {return new ActiveXObject("Msxml2.XMLHTTP");} 
    catch (error) {} 
    try {return new ActiveXObject("Microsoft.XMLHTTP");} 
    catch (error) {} 

    throw new Error("Could not create HTTP request object."); 
} 

var request = makeHttpObject(); 
request.open("GET", "api/dev/blah?id=4F", true); 
request.setRequestHeader("Accept", "application/xml"); 
request.setRequestHeader("Content-Type", "application/xml"); 
request.send(null); 
request.onreadystatechange = function() { 
    if (request.readyState==4 && request.status==200) { 
     console.debug(request.responseText); 
    } 
}; 
+0

Thx回复。出于某种原因,对request.setRequestHeader的调用没有返回。那里有任何想法?请求在检查if(请求)后是否有效... – JaJ 2012-07-09 22:09:45

+0

您需要在'open'之后和'send'之前设置标题。从Firebug控制台测试,修复了我的答案。 – Wolfram 2012-07-09 22:16:21

+0

是的,刚刚发现你刚刚迭代(thx)...我注意到的一件事是,我的xml由于某种原因在onreadystatechange()函数中返回两次。有关于此的任何想法? – JaJ 2012-07-09 22:27:25

1

试试这个

request.onreadystatechange = callBackfunction(); 
request.send(null); 

.....

function callBackfunction() 
{ 

    if(request.readyState == 4) 
    { 
    //alert(request.responseText) 
    if(request.status == 200) 
     {  
      var xmlDoc = request.responseXML; 
     var root = xmlDoc.documentElement; 
     var nodesList = root.childNodes; 
     nodeListLen = nodesList.length; 

    }// end of if(xmlRequest.status==200) 

    } // end of if(xmlRequest.readyState==4) 

    } // end of callBackfunction 
1

问题是XHR不响应加载事件。它与onreadystatechange回应:

request.onreadystatechange = function(){ 
    if (request.readyState == 4 && (request.status >= 200 && request.status < 300)) { 
     successCallback(); 
    } 
}