2012-05-14 60 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

哎呀,我的意思是这是一个评论,如果我们能够达到某种清晰度,仍然乐意提供帮助 –