尝试将javascript与REST结合使用

尝试将javascript与REST结合使用,javascript,json,web-services,Javascript,Json,Web Services,没有什么比web开发更让我沮丧的了,幸好我没有经常做,下面是一个例子。以下代码在DreamWeaver Live View中工作正常,在Chrome上的警报(“2”)后停止(警报3从未出现,输出中也没有任何内容),在Internet Explorer中根本不工作,这有什么原因吗 <script type="text/javascript"> function getStuff() { var url = "http://url/to/restful/api";

没有什么比web开发更让我沮丧的了,幸好我没有经常做,下面是一个例子。以下代码在DreamWeaver Live View中工作正常,在Chrome上的
警报(“2”)
后停止(警报3从未出现,输出中也没有任何内容),在Internet Explorer中根本不工作,这有什么原因吗

<script type="text/javascript">
    function getStuff() {
        var url = "http://url/to/restful/api";              

        alert("1");     
        var client = new XMLHttpRequest();              
        client.open("GET", url, false);

        client.setRequestHeader("Content-Type", "application/json");
        alert("2")

        client.send();  
        alert("3")              

        document.getElementById("output").value = client.responseText; 
    }    
</script>

函数getStuff(){
变量url=”http://url/to/restful/api";              
警报(“1”);
var client=new XMLHttpRequest();
client.open(“GET”,url,false);
setRequestHeader(“内容类型”、“应用程序/json”);
警报(“2”)
client.send();
警报(“3”)
document.getElementById(“输出”).value=client.responseText;
}    
这叫做:

<button onClick="getStuff()">GET</button>
GET
请尝试以下代码: 请通过这个链接


函数getStuff(){
变量url=”http://url/to/restful/api";              
警报(“1”);
var client=getXMLHttpRequestObject();
client.open(“GET”,url,false);
client.onreadystatechange=函数(){
if(client.readyState==4){
document.getElementById(“输出”).value=client.responseText;
}
};
setRequestHeader(“内容类型”、“应用程序/json”);
警报(“2”)
client.send();
警报(“3”)
}    
函数getXMLHttpRequestObject(){
var ref=null;
if(window.XMLHttpRequest){
ref=新的XMLHttpRequest();
}如果(window.ActiveXObject){//IE。
ref=新的ActiveXObject(“MSXML2.XMLHTTP.3.0”);
}
返回ref;
}
在旁注上

client.open(“GET”,url,false)

使用ajax使用同步连接是个坏主意。它将冻结您的UI代码

这就是从未调用警报(3)的原因。执行xhr.send()时,线程停止并等待服务器的响应


理想的方法是
client.open(“GET”,url,true)

我不知道,应该吗?我对JS一无所知。我是如何使用jQuery的?@Marian:new XMLHttpRequest()在IE中不起作用。请浏览此链接,不同的浏览器处理事情的方式略有不同,因此如果您不熟悉JS和每个浏览器中的怪癖,可以使用框架。jQuery非常棒,因为它在so上被很好地覆盖了。我喜欢安德或安魂曲,但它们可能不是你想要的。好吧,有道理。那么,我如何使用jQuery创建相同的请求呢?这将修复IE的请求,但不修复Chrome的请求。@Marian:现在试试代码。请务必学习如何进行Ajax调用。我知道对于一个正在编写C和C++的人来说,这将是新的。每个人都在那个位置。附言:我在这里没有做过任何抽象的东西,请根据情况进行修改,总有一天我会学会的。到目前为止,这是我一生中写的最多的Javascript。上面的代码对Chrome来说仍然不太好。这会破坏DreamWeaver的功能,而不会修复Chrome的功能。哇,这太糟糕了。在
client.onreadystatechange=function(){
中放一个console.log,控件将在client.send()之后返回此函数。警报(3)应该放在上面引用的if语句中。否则,当您使其异步时,警报(1)、警报(2)和警报(3)三者应该在
getStuff()之后立即出现
函数被调用。另外,如果您能提到您试图解决的用例是什么的话。
document.getElementById(“输出”).value=client.responseText;
应该在onreadyStateChange处理程序中,特别是在
if
中,我正在尝试编写一个简单的REST API客户端。发送/显示get、post、put、delete谓词的JSON数据和响应状态。对于响应代码,您可以在onreadyStateChange中处理它,并放入要检查的if条件readystate=4(正如您正确所做的)。或者,这可以在onload事件处理程序中处理。onload与readystate=4相同。因此,伪算法应该是:
xhr=new-XMLHttpRequest();xhr.open();xhr.onload=function(e){//handle-response-for-http-verbs-here。使用JSON.parse(e.responseText)访问JSON并执行一些操作}xhr.onerror=函数(e){//发生了一些不好的事情,请在此处处理}
<script type="text/javascript">
    function getStuff() {
        var url = "http://url/to/restful/api";              

        alert("1");     
        var client = getXMLHttpRequestObject();              
        client.open("GET", url, false);

        client.onreadystatechange = function() {
          if(client.readyState == 4){
                  document.getElementById("output").value = client.responseText;
            }
        };

        client.setRequestHeader("Content-Type", "application/json");
        alert("2")

        client.send();  
        alert("3")              


    }    

function getXMLHttpRequestObject() {
    var ref = null;
    if (window.XMLHttpRequest) {
        ref = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // Older IE.
        ref = new ActiveXObject("MSXML2.XMLHTTP.3.0");
    }
    return ref;
}
</script>