AJAX URL问题......很奇怪

时间:2014-10-03 14:56:42

标签: php jquery ajax

我有一个页面,我正在尝试进行AJAX调用,但它无法正常工作,我很难过为什么。我的电话是:

$.ajax({
    type: "GET",
    url: "<relative URL>/index.php?action=x",
    dataType: "JSON"
}).success(function(person) {
    alert(person.name) //alerts naem
});
    return false;
});

和PHP是:

<? 

if($_GET["action"] == "x"){

    $person = array("name"=>"Jon Doe","Reputation"=>"Good");
    header("Content-Type: application/json");
    echo json_encode($person);
}

?>

我不认为问题是错误的URL,因为它是工作调用的c / p。在我看来(但我不确定)它选择在最初加载源页面时重用旧的“动作值”。出于某种原因,它完全忽略了我的行动价值......?

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

尝试将PHP移动到自己的文件而不是index.php中,我假设它是您的主要PHP文件。

$.ajax({
    type: "GET",
    url: "/ajax.php?action=x",
    dataType: "JSON",
    success: function (person) {
       console.log(person.name);
    }
});

这应该是一个单独的文件。称之为ajax.php为例。

<? 
// ajax.php
if($_GET["action"] == "x"){

    $person = array("name"=>"Jon Doe","Reputation"=>"Good");
    die(json_encode($person));
}

?>

只需确保ajax.php位于项目的路线中,这应该可行。如果没有,请检查console.log。

答案 1 :(得分:0)

尝试将变量移动到“数据”中:

$.ajax({
    type: "GET",
    url: "<relative URL>/index.php", 
    data: "action=x",
    success: function (person) {
       console.log(person.name);
    }
});

答案 2 :(得分:0)

由于您使用get参数调用index.php可能回显json_encode ,然后继续输出if语句之后的所有其他内容。< / p>

试试这个?

<? 

if($_GET["action"] == "x"){

    $person = array("name"=>"Jon Doe","Reputation"=>"Good");
    header("Content-Type: application/json");
    echo json_encode($person);
    exit;

}

?>

我假设您在if语句下面的index.php中有更多内容。如果是这样,那么将需要exit;语句,以便您只回显json而不是if语句之后的任何内容。

可以在Google Chrome的网络标签下的Google工具开发工具中查看ajax响应。


我们说你没有exit;声明:

<? 

if($_GET["action"] == "x"){

    $person = array("name"=>"Jon Doe","Reputation"=>"Good");
    header("Content-Type: application/json");
    echo json_encode($person);

}

?>

<html>
<head></head>
<body>
...etc, etc

Dev工具下的ajax响应看起来像这样:

{"name":"Jon Doe","Reputation":"Good"}<html><head></head><body>... and so on

然后尝试将$ .ajax解析为JSON对象。

但这是不可能的,因为<html><head></head><body>...无效JSON。

希望这有帮助!