JavaScript 代码未正确检查 ajax 请求

标签 javascript php jquery ajax

我有一个星期四的案例,我想知道为什么这不起作用。

问题:即使页面成功返回数组的值,我也无法从 AJAX 请求返回数组的值。

所以,这是我的 AJAX 请求:

    $.ajax({
    type: "GET",
    url: "get-sendgrid-info.php?username=" + emailToCheck,
        success: function(dataSG) {
            console.log("Length: " + dataSG.length + " Username: " + dataSG[0].username);

            if (dataSG[0].username) {
                console.log('CURRENTLY IN SEND GRID!');
                $(".sgstatus").html("<div style='font-weight:bold;color:green;'>CURRENTLY IN SENDGRID</div>");
            }else{
                console.log('NOT IN SEND GRID!');
                $(".sgstatus").html("<div style='font-weight:bold;color:red;'>NOT IN SENDGRID</div>");
            }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            console.log(XMLHttpRequest);
            console.log(errorThrown);
        }
    });

并且 dataSG 将调用 php 页面:

    if ($email) echo json_encode($data);
}
$stmt->close();
$mysqli->close();

它将输出如下内容:

Array
(
    [0] => stdClass Object
        (
            [username] => sample@email.net
            [email] => sample@email.net
            [active] => true
            [first_name] => John
            [last_name] => Doe
            [address] => 123 Fake Street
            [address2] => Suite117
            [city] => Denver
            [state] => CO
            [zip] => 12345
            [country] => US
            [phone] => 555-555-5555
            [website] => http://website.com
            [website_access] => true
        )

)
1

(是的,甚至是 1)。

所以,当我在 AJAX 请求后尝试这个时

        if (dataSG[0].username) {
            console.log('CURRENTLY IN SEND GRID!');
            $(".sgstatus").html("<div style='font-weight:bold;color:green;'>CURRENTLY IN SENDGRID</div>");
        }else{
            console.log('NOT IN SEND GRID!');
            $(".sgstatus").html("<div style='font-weight:bold;color:red;'>NOT IN SENDGRID</div>");
        }

即使响应显示了一个数组,其中清楚地显示了用户名,但我总是得到NOT IN SENDGRID

请帮忙?

编辑:我应该补充一点,我在 IIS 服务器上。

编辑:响应控制台显示:

Object {readyState: 4, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}abort: 
...

Object
create-email.php:2629 SyntaxError: Unexpected token A {stack: (...), message: "Unexpected token A"}message: "Unexpected token A"stack: (...)get stack: function () { [native code] }set stack: function () { [native code] }__proto__: Error

最佳答案

我认为原因是您的 pho 脚本正在回显以“Array”开头的字符串。 Ajax .get 方法对返回对象进行智能猜测。当它从 php 接收到一个字符串时,它无法将其转换为 Jason 或 xml,因此它认为 dataSG 只是字符串。 Json_encode 没有成功完成。您必须将 php 输出格式化为“['a','b']”之类的内容,然后 Ajax 才能成功将其转换为 JavaScript 数组。

关于JavaScript 代码未正确检查 ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29542566/

相关文章:

javascript - 检查时间是否大于一天中的特定时间

php - 使用 ->update() 时 Laravel $fillable 会保护吗?

javascript - DataTables 动态添加列到表

java - 如何创建基于 JavaScript 数组的 Java 列表?

javascript - 获取文本框的值到另一个html文件

javascript - 如何使用 AngularJS 的 $http 将文件发送到 PHP 脚本

javascript - oop:点击事件

php - 在同一页面中将 PHP 值赋予 Javascript

javascript - 跨域问题阻止我的 ajax 调用从我的 Express 文件中检索数据

javascript - 如何将变量更改推送到事件 Canvas 绘制