【问题标题】:Ajax call failing; xhr.responseXML is undefinedAjax 调用失败; xhr.responseXML 未定义
【发布时间】:2015-06-27 03:07:54
【问题描述】:

我正在尝试进行简单的 ajax 调用:

当用户选择和选项时,有关该选项的一些信息将是 回显到 div 中(这是动态的)

这是我的 ajax 调用代码

ajax.js

$(document).ready(function()
{ 
//Add Event 
    //Currently Broadcasting @Zone 
    $('#beacon0').on('change', function () 
    {
        var Selected = $(this).find("option:selected");
        var SelectedText   = Selected.text();
        var SelectedEncoded = encodeURIComponent(SelectedText);

        $.ajax
        ({
        url:        'ajax-addevent.php',
        data:       'n_beacon='+ SelectedEncoded,
        dataType:   'JSON',
        success: function(returnClass)
            {
                var resultajax = jQuery.parseJSON(returnClass)
                console.log(resultajax);
            },
        error: function(xhr, status, error) 
            {
                var errors = JSON.parse(xhr.responseText);
                console.log("failed");
                console.log (errors);
            }
        });
    });

});

所以 ajax 调用应该在 URL 中给出区域的名称,所以我可以在我的 php 脚本中 $_GET 参数。这是我运行的 php,只是为了测试 ajax 调用。

ajax-addevent.php

<?php
include("classes/event.class.php");

$event = new Event();
$GetZoneName = $_GET['n_beacon'];
$ZoneName = urldecode($GetZoneName);
$arrayDetails = $event->getBeaconEvent($ZoneName);
while($row = mysqli_fetch_array($arrayDetails))
{
        $EventTitle = $row["n_title"];
        $EventLink = $row["n_link"];
        $EventDate = $row["n_date"];
}
        $arr = array( "EventTitle" => $EventTitle,
                           "EventLink" => $EventLink, 
                           "EventDate" => $EventDate );

        header("content-type:application/json");

        $json_arr = json_encode($arr);

        return $json_arr;
?>

我的问题是 ajax 调用失败并给了我这个结果:

我的 ajax 调用有什么问题?你能帮忙吗?

编辑更新代码:

【问题讨论】:

    标签: php jquery ajax xmlhttprequest


    【解决方案1】:

    当返回的数据类型为 JSON 时,您尝试获取 XML 响应 - xhr.responseXML 将始终未定义,除非响应是有效的 XML。

    尝试改用 xhr.responseText。您可以使用 JSON.parse(xhr.responseText) 从中获取 javascript 对象。

    另一个好方法是使用当前浏览器的开发工具直接检查网络响应(在 Firefox 或 Chrome 中按 F12,然后打开“网络”选项卡)。

    【讨论】:

    • 现在当我选择一个选项时,我得到一个“Uncaught SyntaxError: Unexpected token
    • 看起来浏览器认为它正在获取 XML。尝试将以下内容添加到您的 PHP 以设置响应的内容类型: header("content-type:application/json");
    • 嘿,我按照你的建议更新了问题,如果你有时间可以检查一下,因为我仍然收到错误:(
    • 您的 JSON 格式不正确。查看 Chrome 中的网络选项卡,查找对 ajax-addevent.php 的调用并在此处发布回复。
    • 那里没有回应; puu.sh/ip44V/02e7188122.png 。我认为这是 php(我忘记了 urldecode),但这不起作用,我会更新代码。
    猜你喜欢
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2018-02-20
    • 2015-02-08
    • 1970-01-01
    相关资源
    最近更新 更多