AJAX URL问题…非常奇怪


AJAX URL issue…very odd

我有一个页面,我正试图从中进行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的工作呼叫。在我看来(但我不确定),它选择重用最初加载源页面时的旧"操作值"。出于某种原因,它完全忽略了我的行动价值…?

有什么想法吗?

尝试将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。

尝试将变量移动到"数据":

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

由于使用get参数调用index.php,因此可能正在回显json_encode,然后在if语句之后继续输出其他所有内容

试试这个?

<? 
if($_GET["action"] == "x"){
    $person = array("name"=>"Jon Doe","Reputation"=>"Good");
    header("Content-Type: application/json");
    echo json_encode($person);
    exit;
}
?>

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

ajax响应可以在Google Chrome的开发工具中的"网络"选项卡下查看

<小时>

假设您没有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

开发工具下的ajax响应如下所示:

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

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

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

希望这能有所帮助!