如何在没有jquery的情况下使用ajax请求

时间:2014-01-30 10:57:18

标签: javascript jquery ajax symfony

function imageHandler(myToDo,myimageId)
{ 
    $.get('{{path('imageHandler')}}',
        {imageId: myimageId, toDo: myToDo},  
        function(response) {
            if(response.code == 100 && response.success) {
                //success
                alert(myToDo+' was sent');
            }
            else if(response.code == 200) {
                //code 200 = user not logged in
            }; 
        }, "json");
}

这是我正在编写的symfony2应用程序的工作ajax代码。

我使用jquery的$.get来发送数据,如何在没有jQuery的情况下编写这个函数?我已经研究过其他类似的问题,但我不明白答案。

已经尝试过这个

function imageHandler(myToDo,myimageId)
{ 
    var hr = new XMLHttpRequest(); 
    var vars = {imageId: myimageId, toDo: myToDo};

    hr.open("GET", "{{path('imageHandler')}}", true); 
    hr.setRequestHeader("Content-type", "application/json"); 
    hr.onreadystatechange = function() 
    {
      if(hr.code == 100 && hr.success)
      {
        //success
      }
       else if(hr.code == 200) 
       {
        //code 200 = user not logged in
       }
    } 
    hr.send(vars);  
}

这是答案:

一位同事刚回答了这个问题。 感谢您的帮助,以下是答案

function imageHandler(myToDo,myimageId)
{ 
    var xml = new XMLHttpRequest();  
    xml.open("GET", "{{path('imageHandler')}}", true); 
    xml.setRequestHeader("Content-type", "application/json"); 

    xml.onreadystatechange = function() 
    {
       var serverResponse = JSON.parse(xml.responseText);

       if(serverResponse.code == 100 && serverResponse.success)
       {
        //success 
       }
       else if(serverResponse.code == 200) 
       {
          //not logged in

       }

        xml.send({imageId: myimageId, toDo: myToDo});   
   }
}

2 个答案:

答案 0 :(得分:1)

正确使用您的HTTP动词

hr.open("GET", "{{path('imageHandler')}}", true); 

您正在发出GET请求,但尝试向正文发送请求。你需要使用POST(或者PUT),而不是GET。

hr.open("POST", "{{path('imageHandler')}}", true); 

或者:您编写的jQuery代码正在发出GET请求并将数据编码为查询字符串。你可以这样做。


发送您声称要发送的数据格式

hr.setRequestHeader("Content-type", "application/json"); 

你说你发送JSON但是......

var vars = {imageId: myimageId, toDo: myToDo};
hr.send(vars);  

... vars是一个JavaScript对象。转换为字符串时,它看起来像“[Object object]”。如果要发送JSON,则需要生成JSON。

var vars = {imageId: myimageId, toDo: myToDo};
hr.send(JSON.stringify(vars));  

请注意,处理数据的服务器端程序需要为set up to handle JSON requests

或者:您编写的jQuery代码是将数据编码为查询字符串而不是JSON。你可以这样做。


您需要正确检查响应状态

  if(hr.code == 100 && hr.success)

code属性来自哪里? success属性来自哪里?它们都没有出现在您说过的文档中。

如果您使用onreadystatechange处理数据,则需要测试是否:

  • 就绪状态为DONE
  • HTTP状态正常

这样:

if (hr.readyState == 4 && hr.status == 200)

答案 1 :(得分:0)

在javascript中,您可以尝试以下内容:

req = new XMLHttpRequest();
req.onreadystatechange=function() { 
    status = req.status; //this is your response.code
 responseHtml = req.responseText; }

req.open("GET","your ajax file here",true);
req.send();

这只是关于javascript中的ajax请求的想法。 more info here