2016-07-22 7 views
0

Ich versuche, eine Methode zu finden, um einen JSON zurückzugeben, wenn es ein AJAX-Aufruf ist, sonst möchte ich den HTML.return json wenn ajax call sonst zurück html

Ich bin nicht einen Rahmen oder ein Templat mit ...

das ist, was ich in meiner ersten Seite getan

$.ajax({ 
    type : 'GET', 
    dataType: 'json', 
    url : 'XXXXX.php', 
    data : {'id' : id_test }, 
    cache : false , 
    success : function(html) { 
     console.log(html); 
    } 
}) 

Und in meiner XXXXX.php Seite habe ich

<?php 
    $my_id = $_GET['id']; 
    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
     .... 
     return json_encode($my_value); 
    } else { 
     ?> 
     <html> 
      <head> 
       <title></title> 
      </head> 
      <body> 
       bla bla ba bla bla 
      </body> 
     </html> 
     <?php 
    }  
?> 

Ich bin mir nicht sicher, ob ich die gute Lösung verwende.

+0

Sie können ein $ _GET var verwenden wie: 'ajax.php id = X & type = ajax'. Auch können Sie Ihre Datei in 2 trennen und haben eine für die Ajax-Anfrage eine andere für HTML, die ich denke, es ist die beste Lösung. –

Antwort

0

Normalerweise gibt es zwei (distinct ...) Sätze von URLs, dass der Host bestimmt:

  1. URLs, die direkt durch den Browser zugegriffen werden sollen, und die HTML zurückzukehren.

  2. URLs, auf die mit (nur) AJAX-Aufrufen zugegriffen werden soll und die JSON (oder XML) zurückgeben.

URLs in der zweiten Gruppe ist ausschließlich für Programm-zu-Programm-Kommunikation:   die Technik manchmal formal bezeichnet als Remote Procedure Calls (RPC).   A (JavaScript) Programm auf der Client-Seite spricht mit ein anderes Programm auf der Host-Seite und dann programmatisch auf die Antwort auf irgendeine Art und Weise handeln.

Während Ihre Technik könnte funktionieren, und oberflächlich scheint mir korrekt codiert zu sein, ich habe es fast nie wirklich gesehen und würde es nicht empfehlen.

0

$_SERVER['HTTP_X_REQUESTED_WITH'] ist der richtige Weg, aber nicht alle Server/Frameworks stellen diese Variable zur Verfügung, so dass andere Prüfungen an Ort und Stelle wichtig sein werden. Zum Beispiel können Sie contentType: "application/json", um Ihre jQuery Ajax-Optionen hinzufügen, dann überprüfen Sie $_SERVER["CONTENT_TYPE"] Wert:

if($_SERVER["CONTENT_TYPE"] === 'application/json') { 
    //.... 
}