2013-10-08 3 views
0

У меня есть эта игра, которую я делаю, и я использую вызов ajax для php для получения элементов из базы данных, но я получаю ошибку, поэтому preloader не уйдите, и я получаю эту ошибку, когда я просматриваю ресурсы в Chrome: «Uncaught TypeError: Невозможно прочитать команду« команда »null». Любая идея, почему это так? Jquery:Uncaught TypeError: Не могу прочитать свойство 'team' of 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 вернет ложь, когда является данных - должно быть наоборот:

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

'return' не работает в методах успеха ajax. – karthikr

+0

Это работает, но теперь я получаю следующее: Warning: mysql_fetch_array() ожидает, что параметр 1 будет ресурсом, boolean задан в /home/kenchix1/public_html/game/core/ajax.php в строке 19 {"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) в функция. Если вы используете объектно-ориентированный подход, вам не нужно передавать ресурс в качестве параметра.

Смежные вопросы