Javascript 可以这样运行多个ajax吗?
我想运行一个Ajax查询,从响应“TesterID”中获取“数据”。然后,我想用之前收到的“Datum”运行第二个Ajax,在另一个页面(DB条目)上用这个值进行更新 这是不起作用的代码Javascript 可以这样运行多个ajax吗?,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我想运行一个Ajax查询,从响应“TesterID”中获取“数据”。然后,我想用之前收到的“Datum”运行第二个Ajax,在另一个页面(DB条目)上用这个值进行更新 这是不起作用的代码 <script> /* Funktionen um Startzeiten für Zyklen aus DB.TesterCycleCount zu erhalten bzw. für Test und Stunden, das aktuelle Datum gerundet auf 30 Mi
<script>
/* Funktionen um Startzeiten für Zyklen aus DB.TesterCycleCount zu erhalten bzw. für Test und Stunden, das aktuelle Datum gerundet auf 30 Minuten */
$(document).ready(function(){
var TesterID = "<?php echo $_GET['TesterID']; ?>"; /* value der Tester erhalten */
$.ajax({ /* AJAX aufrufen */
url: 'ma_get-TesterID_Testende.php',
type: 'get', /* Methode zum übertragen der Daten */
data: {TesterID:TesterID}, /* Daten zu übermitteln */
dataType: 'json',
success:function(response){ /* Die zurückgegebenene Daten erhalten */
var CID = response['CID'];
var Datum = response['Datum'];
},
error: function(jqxhtt, status, exception) {
alert('Exception:', exception)
}
}
var TestaufstellungID = "<?php echo $_GET['TestaufstellungID']; ?>";
$.ajax({ /* AJAX aufrufen */
url: 'ma_TestendeSQL.php',
type: 'get', /* Methode zum übertragen der Daten */
data: {Testaufstellung:TestaufstellungID, Datum: Datum}, /* Daten zu übermitteln */
dataType: 'json',
success:function(data){ /* Die zurückgegebenene Daten erhalten */
alert('Successfully called');
},
error: function(jqxhr, status, exception) {
alert('Exception:', exception)
}
}
});
</script>
第一个Ajax与PHP页面ma\u get-TesterID\u Testende.PHP
配合得很好。我已经单独测试了它,但是当我添加第二个Ajax尝试更新时,我上面发布的代码不起作用
<script>
/* Funktionen um Startzeiten für Zyklen aus DB.TesterCycleCount zu erhalten bzw. für Test und Stunden, das aktuelle Datum gerundet auf 30 Minuten */
$(document).ready(function(){
var TesterID = "<?php echo $_GET['TesterID']; ?>"; /* value der Tester erhalten */
$.ajax({ /* AJAX aufrufen */
url: 'ma_get-TesterID_Testende.php',
type: 'get', /* Methode zum übertragen der Daten */
data: {TesterID:TesterID}, /* Daten zu übermitteln */
dataType: 'json',
success:function(response){ /* Die zurückgegebenene Daten erhalten */
var CID = response['CID'];
var Datum = response['Datum'];
},
error: function(jqxhtt, status, exception) {
alert('Exception:', exception)
}
}
var TestaufstellungID = "<?php echo $_GET['TestaufstellungID']; ?>";
$.ajax({ /* AJAX aufrufen */
url: 'ma_TestendeSQL.php',
type: 'get', /* Methode zum übertragen der Daten */
data: {Testaufstellung:TestaufstellungID, Datum: Datum}, /* Daten zu übermitteln */
dataType: 'json',
success:function(data){ /* Die zurückgegebenene Daten erhalten */
alert('Successfully called');
},
error: function(jqxhr, status, exception) {
alert('Exception:', exception)
}
}
});
</script>
所以问题是:有可能像这样运行两个Ajax吗
谢谢
编辑:
AJAX调用为空或未启动。
进一步调查:Ajax会通知我错误部分和空异常,而不会通知我成功部分。因此,它不会进入页面ma_get-TesterID\u Testende.php
,也不会返回数据。
无法启用跨站点脚本可能是问题所在
但在另一个页面中,类似的Ajax调用运行良好
$(document).ready(function(){
var TesterID = "<?php echo $_GET['TesterID']; ?>"; /* value der Tester erhalten */
$.ajax({ /* AJAX aufrufen */
url: 'ma_get-TesterID.php',
type: 'get', /* Methode zum übertragen der Daten */
data: {TesterID:TesterID}, /* Daten zu übermitteln */
dataType: 'json',
success:function(response){ /* Die zurückgegebenene Daten erhalten */
var len = response.length;
$("#Teststart").empty(); /* Die erhaltenden Daten werden bei der ID angezeigt */
for( var i = 0; i<len; i++){
var CID = response[i]['CID'];
var Datum = response[i]['Datum'];
$("#Teststart").append("<option value='"+Datum+"'>"+Datum+"</option>");
}
}
});
$("#TesterID").change(function(){ /* Wenn du änderst und vom Select Feld auswählst */
var TesterID = $(this).val(); /* value der Tester erhalten */
$.ajax({ /* AJAX aufrufen */
url: 'ma_get-TesterID.php',
type: 'get', /* Methode zum übertragen der Daten */
data: {TesterID:TesterID}, /* Daten zu übermitteln */
dataType: 'json',
success:function(response){ /* Die zurückgegebenene Daten erhalten */
var len = response.length;
$("#Teststart").empty(); /* Die erhaltenden Daten werden bei der ID angezeigt */
for( var i = 0; i<len; i++){
var CID = response[i]['CID'];
var Datum = response[i]['Datum'];
$("#Teststart").append("<option value='"+Datum+"'>"+Datum+"</option>");
}
}
});
});
});
$(文档).ready(函数(){
var TesterID=“”;/*测试仪erhalten*的值
$.ajax({/*ajax aufrufen)*/
url:'ma_get-TesterID.php',
键入:“get”,/*Methode zumübertragen der Daten*/
数据:{TesterID:TesterID},/*Daten zuübermitteln*/
数据类型:“json”,
成功:功能(响应){/*Die zurückgebenene Daten erhalten*/
var len=响应长度;
$(“#Teststart”).empty();/*在ID为angezeigt的情况下*/
对于(var i=0;i原始代码的几个问题:
A.第一个ajax
必须在开始第二个ajax
之前完成
您的第二个ajax
调用需要第一个ajax
调用返回的Datum
值。目前,第二个ajax
将在发送第一个ajax
后立即启动,然后返回Datum
。因此我们需要等待第一个ajax
返回Dat嗯
,然后我们可以使用它作为第二个ajax
的输入
实现这一点的简单方法是使用ECMA2017(docs)的async/await
功能。这允许javascript异步运行,并在继续之前等待完成某些操作
为此,我们需要首先将封闭函数声明为async
(请参见下面代码中的注释//1):
然后我们在第一个$(ajax)
调用前面添加wait
(请参见下面代码中的注释//3):
javascript引擎将在第一次调用ajax时暂停代码,直到返回Datum
值。然后它将继续正常运行
B.基准
需要在封闭函数的顶层
如前所述,变量Datum
仅存在于第一次ajax
调用中归因于“success”
的匿名函数中。因此,它不可用于第二次ajax
调用(“Datum未定义”)
您可以通过将Datum
声明为全局(在$(ready){}
之外)来解决此问题,或者更好的方法是,您可以通过在最外层的括号中声明$(ready){}
来将其保持在$(ready){}
内(请参见下面代码中的注释)
最后,您应该将var-Datum=response['Datum'];
替换为Datum=response['Datum'];
(请参见下面代码中的注释)
/*在30分钟的时间内,测试人员在测试和测试中对数据进行循环记录
//1.在函数前面添加'ASYNC'
$(文档).ready(异步函数(){
//2.在顶部声明“基准”
var数据;
var TesterID=“”;/*测试仪erhalten*的值
//3.在第一个AJAX调用前添加wait
等待$.ajax({/*ajax aufrufen)*/
url:'ma_get-TesterID_Testende.php',
键入:“GET”,/*Methode zumübertragen der Daten*/
数据:{TesterID:TesterID},/*Daten zuübermitteln*/
数据类型:“json”,
成功:功能(响应){/*Die zurückgebenene Daten erhalten*/
var CID=响应['CID'];
//4.移除基准面前面的VAR
基准=响应[‘基准’];
},
错误:函数(jqxhtt、状态、异常){
console.log(异常);
警报('异常:',异常)
}
});
var TestaufstellungID=“”;
$.ajax({/*ajax aufrufen)*/
url:'ma_TestendeSQL.php',
键入:“get”,/*Methode zumübertragen der Daten*/
数据:{Testaufstellung:TestaufstellungID,Datum:Datum},/*Daten zuübermitteln*/
数据类型:“json”,
成功:函数(数据){/*Die zurückgebenene Daten erhalten*/
警报('已成功调用Datum='。Datum);
},
错误:函数(jqxhr、状态、异常){
警报('异常:',异常)
}
});
});
Ajax调用不是同步的,使用异步:false也不是首选的解决方案,因为它会生成警告。这里最简单的解决方案是创建两个方法。一个用于获取数据,另一个用于使用数据更新数据库。在第一个方法成功时调用第二个方法。因此
$.ajax({
url: 'ma_get-TesterID_Testende.php',
type: 'get',
data: {TesterID:TesterID},
dataType: 'json',
success:function(response){
var CID = response['CID'];
var Datum = response['Datum'];
SecondMethod(Datum);
},
首先,您应该知道,您应该将JavaScript与生成HTML的HTML或PHP页面分开,以便可以缓存JavaScript。您还应该使用CSS进行缓存,以便更快地加载页面。下面是您的代码可能的样子:
/1){
对于(变量i=0,a,v,testerId,testaufstellungID,l=serialGet.length;i
/*external.css*/
*{
框大小:边框框;填充:0;边距:0;
}
html,正文{
宽度:100%;高度:100%;
}
身体{
背景:#ccc;
}
#试验{
填充:5px 7px;文本对齐:分
await $.ajax({ /* AJAX aufrufen */
/* Funktionen um Startzeiten für Zyklen aus DB.TesterCycleCount zu erhalten bzw. für Test und Stunden, das aktuelle Datum gerundet auf 30 Minuten */
// 1. ADD 'ASYNC' IN FRONT OF FUNCTION
$(document).ready(async function(){
// 2. DECLARE 'DATUM' AT TOP
var Datum;
var TesterID = "<?php echo $_GET['TesterID']; ?>"; /* value der Tester erhalten */
// 3. ADD AWAIT IN FRONT OF FIRST AJAX CALL
await $.ajax({ /* AJAX aufrufen */
url: 'ma_get-TesterID_Testende.php',
type: 'GET', /* Methode zum übertragen der Daten */
data: {TesterID:TesterID}, /* Daten zu übermitteln */
dataType: 'json',
success:function(response){ /* Die zurückgegebenene Daten erhalten */
var CID = response['CID'];
// 4. REMOVE VAR IN FRONT OF DATUM
Datum = response['Datum'];
},
error: function(jqxhtt, status, exception) {
console.log(exception);
alert('Exception:', exception)
}
});
var TestaufstellungID = "<?php echo $_GET['TestaufstellungID']; ?>";
$.ajax({ /* AJAX aufrufen */
url: 'ma_TestendeSQL.php',
type: 'get', /* Methode zum übertragen der Daten */
data: {Testaufstellung:TestaufstellungID, Datum: Datum}, /* Daten zu übermitteln */
dataType: 'json',
success:function(data){ /* Die zurückgegebenene Daten erhalten */
alert('Successfully called Datum='.Datum);
},
error: function(jqxhr, status, exception) {
alert('Exception:', exception)
}
});
});
$.ajax({
url: 'ma_get-TesterID_Testende.php',
type: 'get',
data: {TesterID:TesterID},
dataType: 'json',
success:function(response){
var CID = response['CID'];
var Datum = response['Datum'];
SecondMethod(Datum);
},
await $.ajax({
url: 'ma_get-TesterID_Testende.php',
type: 'get',
data: {TesterID:TesterID},
dataType: 'json',
success:function(response){ /* Die zurückgegebenene Daten erhalten */
},
error: function(jqxhtt, status, exception) {
}
}
$.ajax({
url: 'ma_TestendeSQL.php',
type: 'get',
data: {Testaufstellung:TestaufstellungID, Datum: Datum},
dataType: 'json',
success:function(data){
},
error: function(jqxhr, status, exception) {
}
}
$.ajax({
url: 'ma_get-TesterID_Testende.php',
type: 'get',
data: {TesterID:TesterID},
dataType: 'json',
success:function(response){
$.ajax({
url: 'ma_TestendeSQL.php',
type: 'get',
data: {Testaufstellung:TestaufstellungID, Datum: Datum},
dataType: 'json',
success:function(data){
},
error: function(jqxhr, status, exception) {
}
}
},
error: function(jqxhtt, status, exception) {
}
}
$(document).ready(function() {
$.ajaxSetup(
{
cache : false,
crossDomain: true,
async : false,
type : 'POST',
dataType : 'json'
});
function FirstAjax($url, $value){
var def = new $.Deferred();
var ret_data;
$.post($url, {type : 1, value : { $value}}, function(data){
//Do things with Data
//or
ret_dat=data;
}, "json");
return ret_data;
}
var abc = FirstAjax("site address", "data_values");
var def = FirstAjax("site address", "data_values");
});