2014-03-30 70 views
0

我遇到了使用Ajax從PHP檢索數據的問題。我被卡住了,並且花了很多時間來試圖找出問題所在。Ajax:我無法使用json_encode從PHP獲取數據

這裏是我的PHP代碼:

 <?php //ajax/default_chart_numbers.php 
     require_once '../core/db_connection.php'; 
     $lotto = new Lotto(); 
     $ultimo_concurso=$lotto->ultimo_concurso('foo'); 
     $ultimos_numeros_m=$lotto->ultimos_numeros('bar'); 

     $R1m=$ultimos_numeros_m[1]; 
     $R2m=$ultimos_numeros_m[2]; 
     $R3m=$ultimos_numeros_m[3]; 
     $R4m=$ultimos_numeros_m[4]; 
     $R5m=$ultimos_numeros_m[5]; 
     $R6m=$ultimos_numeros_m[6]; 
     $R7m=$ultimos_numeros_m[7]; 

     //preparing json 
    $json=array('y'=>$ultimo_concurso,'n1'=>$R1m,'n2'=>$R2m,'n3'=>$R3m,'n4'=>$R4m,'n5'=>$R5m,'n6'=>$R6m); 
     print json_encode($json,true); 
     ?> 

PHP文件的輸出是:

{"y":"2745","n1":"1","n2":"13","n3":"19","n4":"29","n5":"41","n6":"46"} 

這裏是jQuery代碼:

<script> 
$(document).ready(function(){ 
    /*Retriving data from PHP file*/ 
    $.ajax({ 
     url: "ajax/default_chart_numbers.php", 
     cache: false, 
     dataType: "json", 
     timeout:3000, 
     success : function (response, textS, xhr) { 
      alert("everything ok :)"); 
     }, 
     error : function (xmlHttpRequest, textStatus, errorThrown) { 
      alert("Error " + errorThrown); 
      if(textStatus==='timeout') 
       alert("request timed out"); 
     }, 
     complete: function(data){ 
      y=data.y; 
      alert('The id number is '+ y); 
     } 
    }); 
}); 
</script> 

當執行時,值未定義。我的意思是,我得到的警報是身份證號碼是未定義的

我在想什麼?

+0

如果你打開剛纔的PHP文件的URL的輸出是什麼? – Anri

+0

您必須從錯誤或成功處理程序獲取警報嗎? – adeneo

回答

2

有在json_encode沒有真正的,有在json_decode得到一個數組,但現在你正在創建一個字符串

變化

print json_encode($json,true); 

echo json_encode($json); 

和完整處理程序不會獲取數據,它有兩個參數,即XHR對象和狀態碼,成功處理程序獲取數據

$.ajax({ 
    url: "ajax/default_chart_numbers.php", 
    cache: false, 
    dataType: "json", 
    timeout:3000, 
    success : function (data) { 
     y=data.y; 
     alert('The id number is '+ y); 
    }, 
    error : function (xmlHttpRequest, textStatus, errorThrown) { 
     alert("Error " + errorThrown); 
     if(textStatus==='timeout') 
      alert("request timed out"); 
    } 
}); 
+0

是的,這沒有把戲! Exce「超棒!」 – Pathros

1

在PHP端,發送JSON有:

header('Content-Type: application/json'); 
echo json_encode($json); 

傳入的數據可能登錄到控制檯:

  1. 內成功:添加console.log(response)
  2. 內完成:添加一個console.log(data.y)
-1

這個丟失: https://api.jquery.com/jQuery.parseJSON/

嘗試使用:

result = $.parseJSON (data); 

result.y有你的價值

+1

不,它不是,數據類型被設置爲JSON,所以它會自動分析,再解析它會導致錯誤。 – adeneo

+0

@adeneo啊,是的,我忽略了那個。說得好。 –