Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php AJAX URL问题…非常奇怪_Php_Jquery_Ajax - Fatal编程技术网

Php AJAX URL问题…非常奇怪

Php AJAX URL问题…非常奇怪,php,jquery,ajax,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是: <? i

我有一个页面,我正试图从中调用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_编码,然后在if语句之后继续输出所有其他内容

试试这个

<? 

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

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

}

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

{姓名:Jon Doe,声誉:Good}。。。等等

然后,$.ajax会尝试将其解析为JSON对象

但这是不可能的,因为。。。不是有效的JSON


希望这有帮助

如果使用浏览器的控制台,是否看到正在发送的网络呼叫?如果是这样的话,你可以看看答案是什么。这会告诉你它是否真的返回了一些东西。如果是这样的话,那么也许您可以将.success替换为.done,正如前面的评论员所提到的,尽管这取决于您的jquery版本。其次,不能在php和jquery之间直接传递json。我相信您首先必须通过$.parseJSONperson传递返回值,然后您可以作为person.name.success访问属性。如果正确,我会一直使用它,您不需要使用$.parseJSON,因为他已经将数据类型设置为JSON,并且他正在从服务器返回JSON。person.name出现了一个提示性编辑;还没有被批准。你错过了一个分号?alertperson.name//alerts naem这可能是原因吗?JavaScript在分号方面是可以原谅的。但你说得对,我下意识地加了一句!我会换的。
<? 

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