2017-01-26 55 views
0

我想在另一個Ajax成功函數內進行Ajax調用,但它以某種方式不起作用。我的控制檯中出現以下錯誤。我不明白這是什麼意思:阿賈克斯調用裏面的ajax成功不起作用

Object { readyState: 0, getResponseHeader: .ajax/v.getResponseHeader(), getAllResponseHeaders: .ajax/v.getAllResponseHeaders(), setRequestHeader: .ajax/v.setRequestHeader(), overrideMimeType: .ajax/v.overrideMimeType(), statusCode: .ajax/v.statusCode(), abort: .ajax/v.abort(), state: .Deferred/d.state(), always: .Deferred/d.always(), then: .Deferred/d.then(), 10 more… }

我發現類似下面從對象

statusText:"SyntaxError: An invalid or illegal string was specified"

JS

//Update the board with the moves so far made 
    var updateBoard = function() { 
     var style; 
     $.ajax({ 
      type: "POST", 
      url: "engine/main.php", 
      data: {code: 2}, 
      success: function(response) { 
       if(response != "") { 
        var obj = JSON.parse(response); 
        lastClick = obj[obj.length - 1].player; 
        $(obj).each(function (i, val) { 
         if (val.player == 1) { 
          style = "cross"; 
         } 
         else if (val.player == 2) { 
          style = "circle"; 
         } 
         $('td[data-cell="' + val.cell + '"]').html(val.sign).addClass(style); 
        }); 

        if(obj.length > 2) { 
         makeDecision(); 
        } 
       } 
       else { 
        lastClick = null; 
        $('td').html("").removeClass(); 
       } 
       setTimeout(updateBoard, 1000); 
      } 
     }); 
    }; 
    updateBoard(); 

function makeDecision() { 
     console.log('starting decision function'); 
     $.ajax({ 
      type: "engine/main.php", 
      data: {code: 3}, 
      success: function(winner) { 
       console.log('end'); 
       console.log(winner); 
      }, 
      error: function(data) { 
       console.log(data); 
      } 
     }); 
    } 

PHP

if(isset($_POST['code'])) { 
    $code = $_POST['code']; 
    //Handle player number on game start 
    if($code == 1) { 
     if (!isset($_COOKIE['gamePlay'])) { 
      header('Location: index'); 
     } 
     $playerCode = $_COOKIE['gamePlay']; 
     $player = $playersHandler->getPlayer($playerCode); 
     echo $player; 
    } 
    // Update board with new moves 
    else if($code == 2) { 
     $currentPosition = $gameHandler->getMoves(); 
     echo $currentPosition; 
    } 
    else if($code == 3) { 
     $result = $code; //$gameHandler->decide(); 
     echo $result; 
    } 
    //Reset Board 
    else if($code == 4) { 
     $gameHandler->reset(); 
    } 
} 
+1

'console.log(response);'輸出什麼? –

+0

你的意思是在第一次ajax成功電話?然後它是一個JSON數組。 – Ayan

+0

哪條線發生錯誤?可能是'response'不是有效的JSON,'val.cell'在jQuery選擇器中無效,或者'val.sign'不是有效的HTML。 – dave

回答

3

你傳入一個無效的字符串type財產makeDecision功能Ajax調用內。你應該設置這個如下:的

type: 'POST', 
url: 'engine/main.php', 
... 

代替

type: 'engine/main.php' 

確保以下行

var obj = JSON.parse(response); 

返回陣列,不是對象。如果obj是不是一個數組,然後obj.lengthundefined

+0

哦!是的,你是對的!!究竟!我在那裏犯了一個錯誤。但是,如果您看到PHP代碼段將'$ code'賦值給'$ result',但仍然沒有得到所需的輸出 – Ayan

+0

,但是在我的控制檯中我變空了。 – Ayan

+0

你確定「obj.length> 2」爲真,並且第二個Ajax調用被執行了嗎?不幸的是,如果沒有實際的工作示例,我無法進行調試:) – kapantzak

0

您可以將ajaxComplate事件這樣的內部再次調用AJAX:

$(document).ajaxComplete(function() { 
    $.ajax({ 
      type: "post", 
      url: 'engine/main.php', 
      data: {code: 3}, 
      success: function(winner) { 
       console.log('end'); 
       console.log(winner); 
      }, 
      error: function(data) { 
       console.log(data); 
      } 
     }); 
}); 
+0

爲什麼'文件'?實際上,我在腳本中創建了多個Ajax請求,以便文檔工作? – Ayan

+0

是的,它會工作。如果你想在Ajax中再次添加Ajax事件,那麼你可以使用ajaxComplate事件。 –

+0

如何將事件處理程序附加到updateBoard函數。 – Ayan

0

你不能直接對象的obj.length長度javascript.So如果你正在解析的對象是這樣的反應properly.Get長度..

var length = Object.keys(obj).length; 

然後

lastClick = obj[length-1].player; 

做出正確使用$.each這樣的..

$.each(obj,function (i, val){ 
//code 

});