2012-05-14 99 views
1

我做了一個使用ajax發送表單到一個PHP文件,它應該返回結果..however在幾個瀏覽器我得到的錯誤,而在Firefox中它似乎像魅力一樣工作。 JS:ajax + php + json =登錄

$.ajax({ 
     type: "POST", 
     url: "http://www.xxxxxx.net/login.php", 
     data: dataString, 
     dataType: "json", 
     success: function(json) { 
      if(json.jresult==false){ 
       alert(json.jerror); 
      } 
      else{ 
       if(json.identification==0 || json.identification==1){ 
        // register: do some stuff 
       } 
       else if(json.identification==2){ 
        // login: do some stuff 
       } 
       else{ 
        return(false); 
       } 
      } 
     }, 
     error: function(xhr, textStatus, errorThrown) { 
      alert('error:'+errorThrown+',status:'+textStatus+',xhr:'+xhr); 
     }, 
     complete: function(jqXHR, textStatus) { 
      alert(textStatus); 
     } 
    }); 

錯誤,我從使用Safari,Opera和RockMelt的Ajax調用獲得:

@complete功能: textStatus =錯誤 @error功能:錯誤:,狀態:錯誤,XHR:[對象物體]

PHP:

session_cache_limiter('nocache'); 
header('Expires: '.gmdate('r',0)); 
header('Content-type: application/json'); 
// set response array 
$aDataR = array(); 
$aDataR['jresult'] = false; 
$aDataR['identification'] = -1; 
if(!isset($_POST['iID'])){ 
} 
else{ 
    if($_POST['iID']==0){ 
     /* REGISTER */ 
    } 
    elseif($_POST['iID']==1){ 
     /* LOST PASS */ 
    } 
    elseif($_POST['iID']==2){ 
     /* LOGIN */ 
     $aDataR['identification'] = 2; 
     if(false==($mResponse = $cChallenges->CheckLogin($_POST['sUser'],$_POST['sPass']))){ 
      $aDataR['jerror'] = "No such user/password combination"; 
      $cChallenges->ProbeLogin($_POST['sUser'],$_SERVER['REMOTE_ADDR']); 
     } 
     else{ 
      $aDataR['jresult'] = true; 
      $aDataR['jsuccess'] = "Thanks for logging in"; 
     } 
    } 
} 
echo htmlspecialchars(json_encode($aDataR), ENT_NOQUOTES); 

忽略所有不重要的代碼。 希望任何人都可以幫助我解決這個問題,提前致謝。

+0

你的ajax調用的實際結果是什麼?在調試器控制檯中查看它。什麼是xhr.responseText? – Bergi

+0

值爲空。 – JustaN00b

+0

這聽起來像一個PHP錯誤,json_encode應該總是打印一個字符串。嘗試調試您的PHP應用程序。 – Bergi

回答

0

這可能是編碼問題。試試這個

echo htmlspecialchars(json_encode($aDataR), ENT_QUOTES); 
+0

Thnx Moyed,現在工作! :d – JustaN00b

0

讓我看看,如果我正確理解這一點,ajax數據恢復正確的格式只在鉻& Firefox,甚至只有當你通過電子郵件發送給自己的JSON?請澄清。

+0

哎呀,我的意思是這是一個評論,如果我們能夠達到某種清晰度,仍然樂意提供幫助 –