2016-07-22 82 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') { 
    //.... 
}