2013-09-28 19 views
5

Ciao Ho un file php che quando viene chiamato dal mio codice ajax/jquery inserisce una riga in una tabella mySQL. Comunque voglio una sorta di feedback per sapere se l'inserimento ha avuto successo o meno. Qui è il mio codice corrente:AJAX/Jquery - Ottieni risposta dal file php

ajax/jquery:

$.ajax({ 
    url: "update.php", 
    success: function(){ 
     alert("success");  
    }, 
    error:function(){ 
     alert("failure"); 
    } 
}); 

PHP:

$conn = ""; 
try { 
    $conn = new PDO("mysql:host=XXX;dbname=XXX", "XXX", "XXX"); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) { 
    echo "Cannot connect to database, try again later"; 
} 
$stmt = $conn->prepare("INSERT INTO data (price) VALUES (:price)"); 
$stmt->bindParam(":price", $price); 
$stmt->execute(); 
$conn=null; 
+0

Dove è il prezzo javascript? –

+0

'$ echo' dovrebbe essere' echo'. –

+0

@SheikhHeera corretto. Anche il prezzo è una variabile dichiarata in precedenza su – Matt9Atkins

risposta

6

Per ottenere un feedback e inviarlo al jQuery.ajax È possibile utilizzare

if($stmt->execute()) { // returns true on success 
    exit('success'); // Prints success and exit the script 
} 
else{ // returns false on fail 
    exit('error'); // Prints error and exit the script 
} 

Nella parte client, nella tua callback success

success: function(data){ 
    alert(data); // either error or success 
} 

Oppure si può controllare le cose come

if(data == 'success') { 
    // ok 
} 

Inoltre, dove è la variabile $price, io non l'ho visto e come ho mrntioned nel commento che $echo dovrebbe essere echo.

+1

Ritengo sia importante menzionare che "errore" non ha nulla a che fare con una risposta "non riuscita" ma una richiesta non riuscita. Qualsiasi risposta ricevuta porta al gestore 'success', 'error' viene chiamato solo per stati diversi da 400. Inoltre, non prendono nemmeno gli stessi parametri. – Kiruse

+0

@ Derija93, non ho aggiunto alcun metodo di errore qui, di quale stai parlando? –

+0

Non ottengo alcun messaggio di avviso indipendentemente dal successo o dall'errore – Matt9Atkins

1

Nella sezione PHP si può fare questo:

$conn = ""; 
try { 
    $conn = new PDO("mysql:host=XXX;dbname=XXX", "XXX", "XXX"); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) { 
    echo "Cannot connect to database, try again later"; 
} 
$stmt = $conn->prepare("INSERT INTO data (price) VALUES (:price)"); 
$stmt->bindParam(":price", $price); 
$stmt->execute(); 
$count = $stmt->rowCount();// Returns the number of rows affected by the last SQL statement 
$conn=null; 
if ($count > 0) 
{ 
    $res = "success"; 
} 
else 
{ 
    $res = "error"; 
} 
//maybe you need to encode the result to use in your js ajax functions! 
json_encode($res); 
exit(); 
7

principale esempio, si può fare molto di più per collegare un feedback vs movimentazione

$.ajax({ 
    url: "update.php", 
    data: $('#form_id').serialize(), 
    dataType: "json", 
    timeout: 15000,  
    success: function(response){ 
    switch(response.status){ 
     case 'saved': 
     alert(response.message); // do what you want 
     break; 
     case 'empty': 
     alert(response.message); 
     break; 
     default: 
     alert("unknown response"); 
    } 
    }, 
    error:function(){ 
    alert("failure"); 
    } 
}); 


// remote php file 
<?php 

    // on database success or whatever 
     $return_arr["status"] = 'saved'; 
     $return_arr["message"] = utf8_encode("Your data ".$name." was saved"); 
     echo json_encode($return_arr); 
     exit(); 

?> 
+1

migliore soluzione a mio modesto parere – drukaman