如果ajax调用则返回json,否则返回html

时间:2016-07-22 16:20:19

标签: javascript php jquery json ajax

我尝试找一个返回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
    }    
?>

我不确定我是否使用了这个好的解决方案。

2 个答案:

答案 0 :(得分:0)

通常,主机提供的两个(不同的......)URL集合:

  1. 旨在由浏览器直接访问并返回HTML的网址。

  2. 旨在使用(仅)AJAX调用访问的URL,以及返回JSON(或XML)的URL。

  3. 第二组中的URL严格用于程序到程序通信:该技术有时被正式称为远程过程调用(RPC)。 A(JavaScript客户端的程序正在与主机端的另一个程序进行通信,然后以编程方式以某种方式对响应进行操作。

    虽然你的技术可以工作,而且表面上看起来我的编码是正确的,但我几乎从来没有真正看过它,也不会推荐它。

答案 1 :(得分:0)

$_SERVER['HTTP_X_REQUESTED_WITH']是正确的方法,但并非所有服务器/框架都提供此变量,因此进行其他检查非常重要。例如,您可以将contentType: "application/json"添加到您的jQuery ajax选项中,然后检查$_SERVER["CONTENT_TYPE"]值:

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