2012-02-21 25 views
0

對於作業分配,我們使用GET方法訪問Web服務器,並在其中返回JSON,XML和腳本類型。對於腳本,它的定義爲:AJAX,類型callbackvar或回調函數的響應

如果指定的腳本,還必須要麼指定

a. callbackfunction 
callme([{"id":"1383","name":"Sweet Deal","desc":"Great place for books","url":"http://amazon.com"}]); 

b. callbackvar 
items=[[{"id":"1383","name":"Sweet Deal","desc":"Great place for books","url":"http://amazon.com"}]]; 

所以我sendRequest將()方法如下所示:

function sendRequest() 
{ 
    var transmission = document.getElementById("transmission").value; 
    var url = "http://classwebsite.php" 
      + "?userid=crystal" 
      + "&response=" + encodeValue(transmission); 

     if (transmission == "script") { 
     url += "&callbackfunction=formatData"; 
    } 

    var callback = {success:handleResponse, 
      failure:handleFailure, 
      timeout:5000 
      }; 

    var transaction = YAHOO.util.Connect.asyncRequest("GET", url, callback, null); 
} 

但我不是真的確定在hw指令中使用callbackvar或callback函數的含義。對我來說,數據包看起來像一個JSON數據包,我已經有了一個方法來解析JSON數據包並格式化數據。

// What gets passed into this method is: YAHOO.lang.JSON.parse(response.responseText); 
function formatData(message) { 
    var str = "<table border=1 class='editable'>"; 
    for (var i = 0; i < message.length; i++) { 
     str += "<tr>" + "<td>" + message[i].id + "</td>" + 
         "<td>" + message[i].name + "</td>" + 
         "<td>" + message[i].url + "</td>" + 
         "<td>" + message[i].desc + "</td>" + 
         "<td>" + "<a href='#' onclick='deleteRequest(this); return false' id='" + message[i].id + "'>delete</a>" + "</td>" + "</tr>"; 
    } 
    str += "</table>"; 
    return str; 
} 

所以從sendRequest將我用handleResponse方法,我想我可能只是這樣做:

else if (transmission == "script") { 
    msg = formatData(response); 
} 
    var responseOutput = document.getElementById("responseOutput"); 
    responseOutput.innerHTML = msg; 

就像我跟我的JSON數據包沒有,但我沒有看到任何輸出。有什麼想法嗎?謝謝。

回答

0

服務器的響應是腳本內容。因此,將腳本標籤與服務器中的responseText內容一起注入頁面中,然後您就可以開始使用了。

當你這樣做 -

var callback = {success:handleResponse, 
     failure:handleFailure, 
     timeout:5000 
     }; 

var transaction = YAHOO.util.Connect.asyncRequest("GET", url, callback, null); 

時調用回調函數是用handleResponse,而不是FormatData將。

+0

你能解釋一下你的答案嗎?我將我的url中的回調更改爲handleResponse。然後在我的handleResponse方法中,我不知道如何解析看起來像「handleResponse([JSON數據包])」的數據。我嘗試在YUI中使用相同的JSON解析器,但出現錯誤。謝謝。 – Crystal 2012-02-22 21:22:14