2013-10-08 43 views
0

我有我正在做的這個遊戲,我使用ajax調用php來從數據庫中獲取項目,但是我得到一個錯誤,所以preloader沒有走開,當我在Chrome上查看資源時出現此錯誤:「未捕獲的類型錯誤:無法讀取屬性」團隊「的空值」。任何想法爲什麼這樣做? jQuery的:未捕獲TypeError:無法讀取屬性'團隊'null

function appendTeam(){ 

$.ajax({ 

     url : _path + "/core/ajax.php", 
     type : 'POST', 
     data : { f: 'getTeam'}, 
     dataType : 'json', 
     success : function(data) { 

     if(data) { 


      return false; 
     } else{ 
      var count = 0; 
      $.each(data.team, function(i, c){ 
       // check 
       if(!$('#'+c)) return true; 
       var element = $('#'+c); 
       $('input[name="s'+i+'"]').val(element.attr('id')); 
       $('.slot.'+(i+1)).append(element); 
       element.data('prevParent', $('.slot.'+(i+1))); 
       count ++; 

      }); 

      appendStatus(count); 
      setTimeout(function(){ 
       $('#preloader').fadeOut('fast',function(){ 
        $('#preloader').remove(); 
        popUp('match'); 
       }); 
      }, 2000); 


     } 

    } 
}); 
} 

PHP的:

if (isset($_POST['getTeam'])) { 
$team = array(); 
$sql = mysql_query("SELECT * FROM accounts WHERE id = '1'") or die(mysql_error()); 


while ($teams = mysql_fetch_array($sql)) { 

$chara1 = $team['cid1']; 
$chara2 = $team['cid2']; 
$chara3 = $team['cid3']; 

} 
$team = json_encode(array(
'chara1' => $chara1, 
'chara2' => $chara2, 
'chara3' => $chara3 
)); 
echo $team; 
} 

而且我希望它呼應了球隊,如果他有這些div元素已經選定一個團隊:

<div id="droppable_slots" class="current_team"> 
        <div class="slot 1">1</div> 
        <input type="hidden" name="s0" value="10"> 
        <div class="slot 2">2</div> 
        <input type="hidden" name="s1" value="7"> 
        <div class="slot 3">3</div> 
        <input type="hidden" name="s2" value="3"> 
       </div> 
+0

我不認爲你的PHP代碼返回有效的JSON,即使它是我沒有看到任何創建一個名爲「團隊」的對象屬性。 – Pointy

+0

我會如何讓它返回一個有效的JSON? –

+0

你可能的意思是'if(!data){'此外,return語句在'success'中不起作用 – karthikr

回答

0

你在發佈數據中尋找錯誤的鍵 - 它應該是「f」,而不是「getTeam」。 (請注意,Ajax調用發送data : { f: 'getTeam'}。)想必你的意思是這樣的:

if (isset($_POST['f']) && $_POST['f'] == 'getTeam') 

另一個錯字:if (data) return false將返回false時,有數據 - 應該是相反的:

if(data && data.team) { 
    // do stuff 
} 
+1

'return'在ajax的成功方法中不起作用。 – karthikr

+0

它的工作原理,但現在我得到了這個:警告:mysql_fetch_array()期望參數1是資源,在第19行/home/kenchix1/public_html/game/core/ajax.php給出的布爾值 {「chara1」:null,「 chara2「:null,」chara3「:null} –

+0

@karthikr不確定你的意思 - 'return'不會退出函數嗎?在這種情況下,它並不重要,因爲「else」塊仍然不會被執行。 – McGarnagle

0

我覺得你的問題是在這裏:

if (data) { 
    return false; // returns false if data exists 
} else { 
    // data does not exist in this block 
    var count=0; 
    $.each(data.team ... 
    ... // 
} 

基本上,因爲你的if/else塊沒有正確形成。這應該修復它...

if (!data) { 
    return false; 
} else { 
    ... // work with data here 
} 

也需要這樣的:

mysql_fetch_array($con, $sql); 

如果你要使用的程序功能,您將需要通過你的連接資源($ CON =的mysql_connect)至功能。如果使用面向對象的方法,則不需要將資源作爲參數傳遞。

相關問題