2013-08-02 3 views
1

J'ai 2 fichiers (call.php et post.php) et en utilisant ajax passer la valeur de l'appel à la poste, et je veux obtenir la valeur de retour de la poste, mais cela ne fonctionne pas. quand je change de poste, modifiez "return" à "echo", ça marche, mais je ne sais pas pourquoi. quelqu'un peut-il m'aider?
Des exemples seraient les plus appréciés.Ajax valeur de retour avec retour ne fonctionne pas

call.php

<script type="text/JavaScript"> 
$(document).ready(function(){ 
    $('#submitbt').click(function(){ 
    //var name = $('#name').val(); 
    //var dataString = "name="+name; 
    var dataPass = { 
      'name': $("#name").val() 
     }; 
    $.ajax({ 
     type: "POST", 
     url: "post.php",   
     //data: dataString,   
     data: dataPass,//json 
     success: function (data) {    
      alert(data); 
      var re = $.parseJSON(data || "null"); 
      console.log(re);  
     } 
    }); 
    }); 
}); 
</script> 

post.php:

<?php 
    $name = $_POST['name']; 
    return json_encode(array('name'=>$name)); 
?> 

mise à jour:

par contraste quand j'utilise MVC "retour" sera le feu.

public function delete() { 
     $this->disableHeaderAndFooter(); 

     $id = $_POST['id']; 
     $token = $_POST['token']; 

     if(!isset($id) || !isset($token)){ 
      return json_encode(array('status'=>'error','error_msg'=>'Invalid params.')); 
     } 

     if(!$this->checkCSRFToken($token)){ 
      return json_encode(array('status'=>'error','error_msg'=>'Session timeout,please refresh the page.')); 
     } 

     $theme = new Theme($id);   
     $theme->delete(); 

     return json_encode(array('status'=>'success')); 
    } 



    $.post('/home/test/update',data,function(data){ 

       var retObj = $.parseJSON(data); 

       //wangdongxu added 2013-08-02 
       console.log(retObj);   

       //if(retObj.status == 'success'){ 
       if(retObj['status'] == 'success'){     
        window.location.href = "/home/ThemePage"; 
       } 
       else{ 
        $('#error_msg').text(retObj['error_msg']); 
        $('#error_msg').show(); 
       } 
      }); 
+3

Lorsque vous mettez quelque chose dans le flux en PHP, utilisez 'echo'. 'return' est utilisé pour les fonctions dans PHP – NoLifeKing

Répondre

2

Ceci est le comportement attendu, l'Ajax va obtenir tout au navigateur émis. Fonctionne uniquement si vous utilisez la valeur renvoyée avec une autre variable ou fonction PHP.

En résumé, php et javascript ne peuvent pas communiquer directement, ils ne communiquent que par php en écho ou imprimé. Lorsque vous utilisez Ajax ou php avec javascript, vous devez utiliser echo/print au lieu de return.


En fait, autant que je sache, return en php est même pas utilisé dans la portée globale très souvent (sur le script lui-même), il est plus susceptible d'être utilisée dans les fonctions, de sorte que cette fonction tient une valeur (mais pas nécessairement le produit) donc vous pouvez utiliser cette valeur dans php.

function hello(){ 
    return "hello"; 
} 

$a = hello(); 
echo $a; // <--- this will finally output "hello", without this, the browser won't see "hello", that hello could only be used from another php function or asigned to a variable or similar. 

Il travaille sur le framework MVC parce que cela a plusieurs couches, probablement la méthode delete() est une méthode du modèle, qui retourne sa valeur au contrôleur, et le contrôleur echo cette valeur dans la vue .

+0

Je sais exactement comment "retour" fonctionne, votre réponse ne correspond pas à ma question – wusuopubupt

+0

woo, ce que vous avez dit plus tard m'a beaucoup aidé !!! – wusuopubupt

1

Utilisez dataType option $.ajax()

dataType: "json" 

Dans post.php essayer cela,

<?php 
    $name = $_POST['name']; 
    echo json_encode(array('name'=>$name));// echo your json 
    return;// then return 
?> 
+0

lors de l'ajout Utilisez cette option dans $ .ajax() dataType:" json ", ne fonctionne toujours pas – wusuopubupt

+0

L'option dataType est en option .. Ajax estime que lui-même ... – bipen

+0

@ wusuopubupt avez-vous eu 'data' dans' alert'? –