2014-01-30 142 views
0
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的情況下編寫此函數?我已經研究過其他類似的問題,但我不明白答案。如何在沒有jQuery的情況下使用ajax請求

已經嘗試過這種

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}); 
    } 
} 
+7

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest – Quentin

+0

我已經試過了,但代碼沒有反應,如果你要檢查我編輯的問題,我將不勝感激 –

+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那麼你需要測試,如果處理數據:

  • 就緒狀態完成
  • HTTP狀態正常

這樣的:

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

感謝您的回答,代碼和成功變量是從這樣的symfony2控制器返回的,如下所示: $ response = array(「code」=> 200,「success」=> false); 返回新的響應(json_encode($ response)); –

+0

然後,在確定響應狀態正常後,您需要解析JavaScript對象的響應的文本內容,然後在* *而不是XHR對象上運行原始'if'語句。 – Quentin

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

+0

'responseHtml = req.responseText;'看起來放錯了位置。 –

+0

謝謝你的回答,你的建議看起來像我已經嘗試過的代碼(<看第二個源代碼>)我會很感激,如果你可以比較jQuery和JavaScript,看看他們爲什麼不響應相同的 –

+0

@FelixKling :我寫這只是一個想法,感謝您的糾正! –

相關問題