2012-12-26 83 views
0

我試圖通過從php文件返回的數組進行循環。通過Ajax(JSON)響應循環錯誤

如果我運行此:

$.ajax({ 
     type: "POST", 
     url: "lib/search/search.standards_one.php", 
     async: "false", 
     dataType: "json", 
     data: {subjects: subjects, grades: grades}, 
     success: function(response){ 
      $("#standards_results").html(""); 
      $.each(response[0], function(){ 
        console.log(this['code'], this['standard_id']); 
      }); 
      } 
     }); 

一切完美。

但是,我需要使用數組(年級)作爲參數來循環這個響應。

這樣的:

$.ajax({ 
     type: "POST", 
     url: "lib/search/search.standards_one.php", 
     async: "false", 
     dataType: "json", 
     data: {subjects: subjects, grades: grades}, 
     success: function(response){ 
       $("#standards_results").html(""); 
       var len = grades.length; 
       var param = ""; 
       for(var x=0; x < len; x++){ 
        param = grades[x]; 
        $.each(response[param], function(){ 
        console.log(this['code'], this['standard_id']); 
        }); 
       } 
      } 
     }); 

然而,當我運行此我得到錯誤「未定義的無法讀取屬性‘長’」。

我試過了許多不同的解決方案,但我仍然得出這個結果。

////

這是JSON對象被創建,其中:

private function retrieve_standards_one(){ 
    $dbh = $this->connect(); 
    $stmt = $dbh->prepare("SELECT code, standard_one_id 
          FROM standard_one 
          WHERE grade_id = :grade_id 
          ORDER BY standard_one_id"); 
    $stnd = array(); 
    for($x = 0; $x < (count($this->grades)); $x++){      
    $stmt->bindParam(':grade_id', $this->grades[$x], PDO::PARAM_STR); 
    $stmt->execute(); 
    $stnd[] = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    } 
    $json = json_encode($stnd); 
    return $json; 
} 
+0

你可以添加一個JSON的例子嗎? – PhearOfRayne

+1

等級在您的成功塊上未定義。你必須使用你得到的迴應來定義它。 – halilb

+0

函數返回什麼 - 是那裏的等級對象? – Hogan

回答

1

grades超出你的成功的功能範圍,這就是爲什麼它是不確定的。 ajax是異步的,所以調用被觸發,並且只有在收到響應(並且成功)時纔會執行你的函數。

快速解決方法是將所需的變量放在全局範圍內,或者如果它們在那裏,則從response獲取。

var len = response.length; 
+0

正是我需要的。謝謝你,先生 – Brendan