2016-07-22 42 views
0

我嘗試找到一個方法來返回JSON,如果它是一個AJAX調用其他我想要的HTML。返回JSON如果AJAX調用,否則返回HTML

我不使用框架或模板...

這是我在我的第一頁

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

在我XXXXX.php頁面做 我

<?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 
    }  
?> 

我不確定我是否使用了良好的解決方案。

+0

您可以使用$ _GET變種,如:'ajax.php ID = X&類型= ajax'。你也可以將你的文件分成2個,並且有一個用於ajax請求,另一個用於html,我認爲這是最好的解決方案。 –

回答

0

通常,有(不同...)組URL的主機提供:

  1. 網址意圖被瀏覽器直接訪問,並且其返回HTML。

  2. 打算使用(僅)AJAX調用訪問並返回JSON(或XML)的URL。第二組中的

URL是嚴格爲程序到程序通信: 的技術有時正式稱爲遠程過程調用(RPC)。   A(的JavaScript)在客戶端程序正在跟另一個程序在主機側,然後編程在以某種方式響應作用。

雖然你的技術可能工作,並從表面上看我似乎是正確的編碼,我幾乎從未真正看到它完成,並不會推薦它。

0

$_SERVER['HTTP_X_REQUESTED_WITH']是正確的方法,但並不是所有的服務器/框架都提供這個變量,所以有其他檢查是很重要的。例如,您可以添加contentType: "application/json",你的jQuery AJAX的選項,那麼你檢查$_SERVER["CONTENT_TYPE"]值:

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