我试图将来自ajax(jquery)响应的数据存储到变量中,因为我需要稍后在代码中使用它。
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所以我认为这样有效,但我需要以某种方式存储它 感谢大家的任何答案
答案 0 :(得分:0)
我试图将来自ajax(jquery)响应的数据存储到变量 ,因为 我需要稍后在代码中使用它。 强>
接受的答案有&#39; var controlNumber = $data;
&#39; Ajax Success Callback中的声明,它不能从Ajax函数外部访问。这句话很清楚,你不能得到controlNumber
&#39;变量在...之外
Ajax回调成功函数,因为 it's a local variable
, declared inside a function
..所以最好是声明一个全局JavaScript变量并再次重新分配值在Ajax Success回调中。
按照他们的方式,如果我按照&#34; I'm trying to store data from ajax (jquery) response to variable
&#34;然后接受的答案很好。
但如果我按照声明&#34; I need to use it later in code
&#34;在这里创造了两个假设..
1 - 如果您的代码仍然在ajax函数内 - 那么很好
2 - 如果您的代码在外部ajax函数上使用ajax响应,那么您将无法获得&#39;
controlNumber
&#39;值。如果你尝试,你会得到&#39;undefined
&#39;
那么处理Ajax响应的最佳方法是什么,创建一个负责返回成功或错误响应的ajax对象的函数。我确信它听起来不太清楚..;)不用担心这里更多或更多阅读:)
AJAX = A 同步 J avaScript a nd X ML。
AJAX是一种用于创建快速动态网页的技术。
AJAX允许通过交换更新异步网页 幕后服务器的少量数据。这意味着 可以更新网页的各个部分,而无需重新加载 整个页面。
内容参考: W3CSCHOOL
请注意单词&#39; asynchronously
&#39;,这意味着如果您调用ajax并尝试在下一行使用ajax响应数据,那么您可以&#39;吨。因为,DOM不会等待Ajax Response&amp;脚本不会停止等待完成ajax的过程它会继续&amp;你会得到“未定义的”#39;直到您没有使用&#39; async: false
&#39; 来生成ajax请求选项。 *但是从jQuery 1.8开始,不推荐使用async:false! Wohooo!听起来很棒!!! @ - @ *
许多人还建议稍后在ajax成功回调中使用global var并设置变量值。但问题是 尽管你尝试在下一个ajax调用之后使用变量,然后它将产生与上述描述相同的错误。
所以最好的方法是存储或使用或获取Ajax响应 使用返回ajax对象的函数,稍后可以使用它 ajax对象与&#39;
YourAjaxObject.success(callback)
&#39;随地 在您的应用程序中的任何时候,不用担心你也可以使用/ put 你的函数需要在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响应值,则调用 成功回调中的那些功能&amp;传递ajax响应为 参数或您可以使用&#39;注射技术&#39; (功能起作用 使用相同的参数)例如
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&amp;通过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);
}
});
}
});
});
希望这会让初学者用户一见倾心,一见钟情的初学者,初恋:D ^ _ ^ Tadaaa .. :)
答案 1 :(得分:-2)
在你的php中,如果在找到行时尝试返回1,则只需echo 1;
而不是echo json_encode(1);
。无论何时调用php页面,输出的值都是Ajax响应中检索到的数据。没有理由对json进行编码,因为它不是json格式的值。它将作为输出的字面值返回。
如果您尝试将响应值存储在同一页面会话中,则需要将变量初始化为全局变量,而不是Ajax请求的局部变量。
var test;
$.ajax({
url:'',
data:{index: value, index: value}, //if you have a form, $('[form selector]').serialize();
method:'', // get or post
success: function(data){
// the data here is the data returned from the Ajax request
test=data.whatever;
}
});
因为测试是在Ajax调用之外初始化的,所以它现在将存储在mem中,直到页面被刷新或更改,并且可以在javascript的其他部分中使用。
答案 2 :(得分:-2)
您的代码看起来没问题做了一些改进尝试:
JS:
$(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 {
$.ajax("./php/register.php", {
method:'POST',
data: {
email: email,
password: password,
confpassword: confpassword,
},
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 if(controlNumber == 0)
{
swal({
type: "error",
timer: 10000,
showConfirmButton: true,
confirmButtonText: "OK",
confirmButtonColor: "#f4511e",
title: "Mail už bol zaregistrovaný."
});
}
else
{
alert(controlNumber );
}
}
})
}
});
});
PHP:
<?php
require_once 'connect.php';
$email = ($_POST['email']);
$password = ($_POST['password']);
$passwordR = ($_POST['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 0;
die();
} else {
$sql = "INSERT INTO users (email, password) VALUES ('$email','$password')";
}
}
if (connect()->query($sql) === TRUE) {
echo 1;
die();
} else {
echo "Error: " . $sql . "<br>" . connect()->error;
die();
}