在ajax请求中存储来自php的响应

马丁K。

我正在尝试将数据从 ajax (jquery) 响应存储到变量,因为我稍后需要在代码中使用它。

查询代码:

  $(document).ready(function () {
  $("#submitReg").click(function () {
    var email = $("#email").val();
    var password = $("#password").val();
    var confpassword = $("#confpassword").val();
    if (email == '' || password == '' || confpassword == '') {
        swal({
            type: "error",
            timer: 10000,
            showConfirmButton: true,
            confirmButtonText: "OK",
            confirmButtonColor: "#f4511e",
            title: "Prosím vyplňte všetky polia!"
        });
    } else {
        $.get("./php/register.php", {
            email: email,
            password: password,
            confpassword: confpassword,
            dataType: 'json',
            //data: '1',

            success: function ($data) {
                var controlNumber = $data;
                alert(controlNumber);
                if (controlNumber != 1) {
                    swal({
                        type: "success",
                        timer: 10000,
                        showConfirmButton: true,
                        confirmButtonText: "OK",
                        confirmButtonColor: "#f4511e",
                        title: "Registrácia prebehla úspešne."
                    });
                  //  $('#registerme')[0].reset();
                } else {
                    swal({
                        type: "error",
                        timer: 10000,
                        showConfirmButton: true,
                        confirmButtonText: "OK",
                        confirmButtonColor: "#f4511e",
                        title: "Mail už bol zaregistrovaný."
                    });

                }
            }
        })
    }
});
}); 

PHP代码:

<?php

require_once 'connect.php';

$email = ($_GET['email']);
$password = ($_GET['password']);
$passwordR = ($_GET['confpassword']);

if ($password == $passwordR) {

$password = hash('sha256', $password);
$emailCheck = mysqli_query(connect(), "SELECT * FROM users WHERE email='" . 
$email . "'");

if (mysqli_num_rows($emailCheck) > 0) {
    echo json_encode(1);
    die();
 } else {
    $sql = "INSERT INTO users (email, password) VALUES ('$email','$password')";
}
}

if (connect()->query($sql) === TRUE) {
//implementuj reset kody ptm
} else {
echo "Error: " . $sql . "<br>" . connect()->error;
}

die();

?>

我正在收到回复 - 1 所以我认为这可行,但我需要以某种方式存储它
谢谢大家的任何答案

尼拉吉·辛格

我正在尝试将数据从 ajax (jquery) 响应存储到变量,因为我稍后需要在代码中使用它。

接受的答案var controlNumber = $data;在 Ajax 成功回调中具有 ' ' 声明,无法从 Ajax 函数外部访问。该声明非常清楚,您无法controlNumber在 Ajax 回调成功函数之外获取 ' ' 变量,因为it's a local variabledeclared inside a function.. 所以最好的方法是声明一个全局 JavaScript 变量并在 Ajax 成功回调中再次重新分配值

顺便说一句,如果我遵循“ I'm trying to store data from ajax (jquery) response to variable这一行,那么接受的答案就可以了。

但是,如果我遵循“ I need to use it later in code语句,则会在此处创建 2 个假设。

1 -如果您的代码仍在 ajax 函数中 - 那么很好

2 -如果您的代码在外部 ajax 函数上使用 ajax 响应,那么您将无法获得 ' controlNumber' 值。如果你尝试你会得到' undefined'

那么处理 Ajax 响应的最佳方法是什么,创建一个负责返回成功或错误响应的 ajax 对象的函数。我确定它听起来不太清楚.. ;) 这里不用担心更多或阅读更多:)

首先了解什么是ajax以及它是如何工作的......?

AJAX =同步Ĵ avaScript一个第二X ML。

AJAX 是一种创建快速动态网页的技术。

AJAX 允许通过在后台与服务器交换少量数据异步更新网页这意味着可以更新网页的部分内容,而无需重新加载整个页面。

内容参考:W3CSCHOOL

请注意“ asynchronously这个词,这意味着如果您调用 ajax 并尝试在下一行使用 ajax 响应数据,那么您不能。因为,DOM 不会等待 Ajax 响应,脚本不会停下来等待完成 ajax 过程,它会继续并且你会得到“未定义”,直到你不使用“ async: false”选项发出 ajax 请求*但从 jQuery 1.8 开始,不推荐使用 async: false !呜呜!!太好听了!!!@-@ *

很多人还建议在ajax成功回调中使用全局变量和设置变量值稍后使用。但问题是你尽快尝试在下一次 ajax 调用后使用变量,然后它会产生与上述相同的错误。

因此,最好的方法是使用返回 ajax 对象的函数来存储或使用或获取 Ajax 响应,以后您可以YourAjaxObject.success(callback)在应用程序中的任何时间使用该 ajax 对象,而无需担心。您还可以在 ajax 成功回调中使用/放置需要 ajax 响应的函数。

我与您分享一个非常简单的例子,以便更好地理解这一点。


// global var declare here
var collect = null;
$(document).ready(function() {
    var btn = $('#mySubmitButton');
    btn.on('click', function(e) {
        e.preventDefault();
        $.post('url.php', {
            id: 1
        }, function(ajx_res) {
            // store ajax response in global var
            collect = ajx_res;
            // 'I will execute last with collect = ajx_res data
            alert(collect);
        });
        // 'I will execute first with collect = null data
        alert(collect);
        // When btn click again, I will execute first with previous ajx_res data
        alert(collect);
    });
});
$(document).ready(function() {
    var btn = $('#mySubmitButton');
    btn.on('click', function(e) {
        e.preventDefault();
        $.post('url.php', {
            id: 1
        }, function(ajx_res) {
            // now I am local var
            var collect = null;
            // store ajax response in local var
            collect = ajx_res;
            // 'I will execute last with collect = ajx_res data
            alert(collect);
        });
        // I will execute first with collect = undefined
        alert(collect);
        // When btn click again I will execute first with same collect = undefined
        alert(collect);
    });
});
/**
 * Ajax Request & Return Response
 * @param url _url         action url
 * @param object options send payloads
 */
function AjaxCall(_url, _options) {
    return $.ajax(_url, {
        method: 'POST',
        data: _options,
        error: function(xhr, ajaxOptions, thrownError) {
            alert("Request Error:" + thrownError + " with Status" + xhr.status);
        }
    });
}
// I am again as global var
var collect = null;
$(document).ready(function() {
    var btn = $('#mySubmitButton');
    // first button, click
    btn.on('click', function(e) {
        e.preventDefault();
        // return ajax object, and can be use within entire application via callback
        collect = AjaxCall(_url, _options);
        // use success callback to retrieve data
        collect.success(function(ajx_res) {
            // I will execute first with ajx_res
            alert(ajx_res);
        });
    });
    var btns = $('#mySubmitButtons');
    // on another button, another click
    btns.on('click', function(e) {
        e.preventDefault();
        // using previous ajax obj to get data
        collect.success(function(ajx_res) {
            // I will execute first with previous ajx_res
            alert(ajx_res);
        });
    });
});

// I am again as global var
var collect = null;
$(document).ready(function() {
    var btn = $('#mySubmitButton');
    // first button, click
    btn.on('click', function(e) {
        e.preventDefault();
        // return ajax object, and can be use within entire application via callback
        collect = AjaxCall(_url, _options);
    });
    var btns = $('#mySubmitButtons');
    // on another button, another click
    btns.on('click', function(e) {
        e.preventDefault();
        // using previous ajax obj to get data
        collect.success(function(ajx_res) {
            // I will execute first with previous ajx_res
            alert(ajx_res);
        });
    });
});

简而言之:

1 - 您不能在其声明区域之外使用局部变量(在函数或循环内部声明)。

2 - Ajax 不返回响应,您可以使用回调获取响应。

3 - 将 Ajax 响应存储在全局变量中以在 ajax 回调函数之外使用。

4 - 如果有任何代码,函数依赖于 ajax 响应,将它们放在 ajax 成功回调中。

5 - 如果任何特定函数需要 ajax 响应值,则在成功回调中调用这些函数并将 ajax 响应作为参数传递,或者您可以使用“注入技术”(使用相同参数运行的函数)例如

function Hello (ajx_res) {
    alert (ajx_res);
    // send in another function
    Foo (ajx_res);
}

function Foo (ajx_res) {
    alert (ajx_res);
    // send in another function
    Bar (ajx_res);
}

function Bar (ajx_res) {
    alert (ajx_res);
}

所以我的答案是这个问题使用 Ajax Object & Get response by Callbacks。

/**
 * Ajax Request & Return Response
 * @param url _url         action url
 * @param object options send payloads
 */
function AjaxCall(_url, _options) {
    return $.ajax(_url, {
        method: 'POST',
        data: _options,
        error: function(xhr, ajaxOptions, thrownError) {
            alert("Request Error:" + thrownError + " with Status" + xhr.status);
        }
    });
}
$(document).ready(function() {
    $("#submitReg").click(function() {
        var email = $("#email").val();
        var password = $("#password").val();
        var confpassword = $("#confpassword").val();
        if (!email || !password || !confpassword) {
            swal({
                type: "error",
                timer: 10000,
                showConfirmButton: true,
                confirmButtonText: "OK",
                confirmButtonColor: "#f4511e",
                title: "Prosím vyplňte všetky polia!"
            });
        } else {
            var ajaxObj = AjaxCall("./php/register.php", {
                email: email,
                password: password,
                confpassword: confpassword,
            });
            // your ajax callback function for success
            ajaxObj.success(function(response) {
                var controlNumber = response;
                if (controlNumber == '1') {
                    swal({
                        type: "success",
                        timer: 10000,
                        showConfirmButton: true,
                        confirmButtonText: "OK",
                        confirmButtonColor: "#f4511e",
                        title: "Registrácia prebehla úspešne."
                    });
                } else if (controlNumber == '0') {
                    swal({
                        type: "error",
                        timer: 10000,
                        showConfirmButton: true,
                        confirmButtonText: "OK",
                        confirmButtonColor: "#f4511e",
                        title: "Mail už bol zaregistrovaný."
                    });
                } else {
                    alert(controlNumber);
                }
            });
        }
    });
});

希望这会为那些一见钟情不习惯 ajax 的初学者解惑,初恋 :D ^_^ Tadaaa.. :)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

来自PHP响应的jQuery AJAX请求null

来自分类Dev

检查来自 ajax 请求的响应

来自分类Dev

电子邮件未存储在来自 ajax 请求的变量中

来自分类Dev

接收来自AJAX POST请求的响应

来自分类Dev

如何存储来自Ajax请求的信息

来自分类Dev

来自JSON请求的PHP无响应

来自分类Dev

从AJAX POST响应中获取并存储Cookie(来自Set-Cookie)

来自分类Dev

使用香草JavaScript存储来自JSONP请求的响应

来自分类Dev

显示来自PHP函数的Ajax响应错误

来自分类Dev

来自Ajax和php的错误响应

来自分类Dev

来自PHP函数的多个ajax请求结果

来自分类Dev

查看来自多个元素的 AJAX 请求的响应数据

来自分类Dev

如何防止用户查看来自AJAX请求的响应?

来自分类Dev

来自本地主机的无响应与ajax请求

来自分类Dev

来自AJAX响应的jQuery中的调用函数

来自分类PHP

php后端对ajax请求的响应应该如何?

来自分类Dev

PHP不会根据来自Javascript的HTTP请求将数据存储在数组中

来自分类Dev

来自 PHP 脚本的 Ajax 响应正在跳过 .done 方法中的 IF 语句

来自分类Dev

如何从ajax响应中获取请求的URL?

来自分类Dev

PHP在处理来自angularjs的POST请求后返回html响应

来自分类Dev

在 ajax 中检索 PHP 响应

来自分类Dev

使用PHP在数据库中存储价值-来自JavaScript的Ajax调用

来自分类Dev

在 Angular 中解析来自 Http 请求的 json 响应

来自分类Dev

在Python中解析来自http请求的文本响应

来自分类Dev

TypeScript 无法识别来自 supertest 的请求响应中的对象?

来自分类Dev

来自http请求的响应未显示在模板中

来自分类Dev

如何等待响应来自 $resource 请求,在 angularjs 中?

来自分类Dev

DataTables JQuery 为来自单独的独立 AJAX 请求的响应提供警告请求未知参数

来自分类Dev

在PHP中设置AJAX请求

Related 相关文章

  1. 1

    来自PHP响应的jQuery AJAX请求null

  2. 2

    检查来自 ajax 请求的响应

  3. 3

    电子邮件未存储在来自 ajax 请求的变量中

  4. 4

    接收来自AJAX POST请求的响应

  5. 5

    如何存储来自Ajax请求的信息

  6. 6

    来自JSON请求的PHP无响应

  7. 7

    从AJAX POST响应中获取并存储Cookie(来自Set-Cookie)

  8. 8

    使用香草JavaScript存储来自JSONP请求的响应

  9. 9

    显示来自PHP函数的Ajax响应错误

  10. 10

    来自Ajax和php的错误响应

  11. 11

    来自PHP函数的多个ajax请求结果

  12. 12

    查看来自多个元素的 AJAX 请求的响应数据

  13. 13

    如何防止用户查看来自AJAX请求的响应?

  14. 14

    来自本地主机的无响应与ajax请求

  15. 15

    来自AJAX响应的jQuery中的调用函数

  16. 16

    php后端对ajax请求的响应应该如何?

  17. 17

    PHP不会根据来自Javascript的HTTP请求将数据存储在数组中

  18. 18

    来自 PHP 脚本的 Ajax 响应正在跳过 .done 方法中的 IF 语句

  19. 19

    如何从ajax响应中获取请求的URL?

  20. 20

    PHP在处理来自angularjs的POST请求后返回html响应

  21. 21

    在 ajax 中检索 PHP 响应

  22. 22

    使用PHP在数据库中存储价值-来自JavaScript的Ajax调用

  23. 23

    在 Angular 中解析来自 Http 请求的 json 响应

  24. 24

    在Python中解析来自http请求的文本响应

  25. 25

    TypeScript 无法识别来自 supertest 的请求响应中的对象?

  26. 26

    来自http请求的响应未显示在模板中

  27. 27

    如何等待响应来自 $resource 请求,在 angularjs 中?

  28. 28

    DataTables JQuery 为来自单独的独立 AJAX 请求的响应提供警告请求未知参数

  29. 29

    在PHP中设置AJAX请求

热门标签

归档