2013-07-31 14 views
6

Jestem nowy w użyciu jQuery do obsługi AJAX i napisałem podstawowy skrypt, aby uzyskać podstawy w dół. Obecnie wysyłam żądanie AJAX do tego samego pliku i chcę wykonać dodatkowe przetwarzanie na podstawie wyników tego wywołania AJAX.Callback żądania AJAX za pomocą jQuery

Oto mój kod:

**/*convertNum.php*/** 

$num = $_POST['json']; 
if (isset($num)) 
echo $num['number'] * 2; 
?> 

<!DOCTYPE html> 
<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<style type="text/css"> 
td {border:none;} 

</style> 
</head> 
<body> 

<table width="800" border="1"> 
<tr> 
<td align="center">Number To Send<br /><input type="text" id="numSend" size="40%" style="border:2px solid black;"></td> 
<td align="center">Number Returned<br /><input type="text" id="numReturn" size="40%" readonly></td> 
</tr> 

<tr><td align="center" colspan="4"><input type="button" value="Get Number" id="getNum" /></td></tr> 
</table> 



<script> 
$(document).ready(function() { 
$('#getNum').click(function() { 
var $numSent = $('#numSend').val(); 
var json = {"number":$numSent}; 

$.post("convertNum.php", {"json": json}).done(function (data) 
{ 
alert(data); 
} 
); 

}); 
}); 
</script> 
</body> 
</html> 

Oto odpowiedź dostanę jeśli mogę przesłać numer '2':

4 

<!DOCTYPE html> 

<html> 

<head> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 

<style type="text/css"> 

td {border:none;} 

</style> 

</head> 

<body> 



<table width="800" border="1"> 

<tr> 

<td align="center">Number To Send<br /><input type="text" id="numSend" size="40%" style="border:2px solid black;"></td> 

<td align="center">Number Returned<br /><input type="text" id="numReturn" size="40%" readonly></td> 

</tr> 

<tr><td align="center" colspan="4"><input type="button" value="Get Number" id="getNum" /></td></tr> 

</table> 

<script> 

$(document).ready(function() { 

$('#getNum').click(function() { 

var $numSent = $('#numSend').val(); 

var json = {"number":$numSent}; 

$.post("convertNum.php", {"json": json}).done(function (data) 

{ 

alert(data); 

} 

); 



}); 

}); 

</script> 
</body> 
</html> 

Oczywiście jestem zainteresowany tylko odbieranie i korzystając z numeru "4", stąd moje pytanie: Jaki jest najlepszy sposób, aby dokładnie określić, jakie dane chcę zwrócić?

Niektóre myśli miałem:

  • owijania całe HTML wewnątrz if (czyli jeśli $ num isset, zrobić HTML nie wyjściowego; wyjście innego HTML), ale potem mam echo HTML , a wolałbym tego nie robić.
  • Konfigurowanie oddzielnego skryptu PHP w celu odebrania wywołania AJAX: To było to, co zrobiłem pierwotnie i działa dobrze. Jednak jestem zainteresowany zatrzymaniem wszystkiego w jednym pliku i chciałem zbadać możliwe sposoby zrobienia tego.

Jestem pewien, że istnieje elegancki sposób na zrobienie tego. Dzięki za wszelkie sugestie!

+0

dlaczego chcesz zachować wszystko w jednym pliku. Powinieneś strukturalizować swój kod. W przeciwnym razie otrzymasz bardzo lage z mylącym kodem. A co z css i javascript? Czy chcesz mieć to wszystko również w jednym pliku? Możesz to zrobić, ale myślę, że to nie byłoby eleganckie. – steven

+0

Steven - wystarczy. Zapotrzebowanie, które chcę zbadać, zachowując wszystkie wywołania w jednym pliku, polega na tym, że pracuję nad projektem, w którym będziemy mieć wiele stron php, wykonujących połączenia AJAX, i próbuję ustalić najlepsze praktyki dotyczące obsługi tej sprawy. Teraz powiem, że każdy skrypt, który używa takiego wywołania AJAX, będzie miał odpowiedni plik .inc include - być może najlepiej będzie wykonać wywołanie POST do tego pliku, zamiast używać tej samej strony lub innej scenariusz. Jestem teraz w fazie eksploracji, a odpowiedzi, które otrzymuję, są ogromnie pomocne. – JRizz

Odpowiedz

7

Elegancki sposób będzie mieć oddzielny (!) Plik PHP, który będzie wyprowadzał tylko część number times 2 z twojego obecnego PHP. Następnie generujesz żądanie AJAX z twojego obecnego PHP do nowego oddzielnego PHP.

+0

Witaj devnull, To było moje oryginalne podejście. Muszę edytować swoją odpowiedź, aby to uwzględnić - dziękuję. Miałem wywołanie AJAX wskazujące na oddzielny skrypt PHP, ale chciałem zbadać ideę utrzymania wszystkiego na jednej stronie. – JRizz

+1

Następnie powinieneś wybrać 'if' ... nie potrzebujesz echo HTML, nadal możesz mieć część HTML poza sekcjami . Będzie to również działać wewnątrz PHP, jeśli instrukcje! – devnull69

+0

Interesujące - nie myślałem o tym. Pozwól mi jeszcze trochę zagrać w moim scenariuszu i zbadać to. Dziękuję - chcę zostawić to otwarte, aby wziąć pod uwagę inne pomysły, ale jeśli to jest najlepsze rozwiązanie, zaznaczę to jako odpowiedź. Doceniam twój wkład. – JRizz

1

UWAGA * Lepszym rozwiązaniem jest trzymać takie rzeczy w oddzielnym pliku, sprawia, że ​​łatwiej odczytać i łatwiejsze do zrozumienia, zwłaszcza jeśli używasz dobrą konwersję nazewnictwa.

Jest to złe podejście proceduralne ale jestem tutaj :):

<?php 
$num = $_POST['json']; 
if (isset($num)) 
echo ($num['number'] * 2); 
die(); 
?> 

albo jeszcze lepiej:

<?php 
$num = $_POST['json']; 
if (isset($num)) 
die($num['number'] * 2); //In case of error you could put them in brackets 
?> 

PS Jako alternatywę dla die(); można wykorzystać exit();, obaj robią prawie tak samo: zakończenie dalszej realizacji

+1

nawiasy w pierwszym podejściu? +1 dla drugiego – steven

+0

Dzięki za literówkę :) nie widziałem tego –

+0

Dzięki Ghostman. To było moje oryginalne podejście - wprowadziłem zmiany w moim pytaniu, aby to określić. Działa świetnie, ale chciałem poznać ideę używania tej samej strony do odbierania wywołania AJAX. Wygląda na to, że wciąż może być najbardziej efektywna droga. Dzięki! – JRizz

1

Możesz dodać die(); po echo numer, jeśli naprawdę chcesz zachować go na tej samej stronie. Spowoduje to zakończenie wykonywania skryptu. Nie zapomnij dodać nawiasów wokół instrukcji if:

if (isset($num)) { 
    echo $num['number'] * 2; 
    die(); 
} 

Nie jest to jednak najbardziej eleganckie rozwiązanie.

+0

DaGhostman Dimitrov pobił mnie do tego. – Valk6

0

Nie wiem, jak skuteczne jest to jednak można zrobić coś takiego:

<?php 
/*convertNum.php*/ 
$num = isset($_POST['json']) ? $_POST['json'] : NULL; //you have errors in this line 
if (!is_null($num)){ 
    echo $num['number'] * 2; 
    exit(); //exit from script 
} 
?> 
Powiązane problemy