Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP foreach循环中的JQuery$.post_Php_Jquery_Exacttarget - Fatal编程技术网

PHP foreach循环中的JQuery$.post

PHP foreach循环中的JQuery$.post,php,jquery,exacttarget,Php,Jquery,Exacttarget,我有一个表单,订阅者可以选择他们想要接收的时事通讯,然后一个AJAX表单将结果发送到精确的目标,并将订阅者添加到订阅者想要添加的每个列表中 我有一个PHP foreach循环设置来处理这个问题 <?php foreach ($listNumbers as $item): ?> var xmlData = 'Ths is the ET API call'; $.post('ET url for API call'+xmlData);

我有一个表单,订阅者可以选择他们想要接收的时事通讯,然后一个AJAX表单将结果发送到精确的目标,并将订阅者添加到订阅者想要添加的每个列表中

我有一个PHP foreach循环设置来处理这个问题

<?php foreach ($listNumbers as $item): ?>
            var xmlData = 'Ths is the ET API call';
            $.post('ET url for API call'+xmlData);      
        <?php endforeach; ?>    
一切正常。。大部分情况下。我使用documentready是因为我想给循环足够的时间来提交API调用。是否有方法检测$.post函数何时完成?如果成功了?然后发送用户到感谢页面

我发现location href在代码运行之前发送了一些用户到感谢页面

谢谢, 迈克尔

有一个回调告诉你它已经完成了

jQuery.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )
  • url—包含请求发送到的url的字符串
  • 数据—随请求发送到服务器的映射或字符串
  • success(data、textStatus、jqXHR)-如果请求成功,则执行的回调函数
  • dataType—服务器所需的数据类型。默认值:智能猜测(xml、json、脚本、文本、html)
虽然我强烈建议您编写一个新的服务器端调用,如果可以的话,您可以只调用一次

var xhrCount = <?= count($listNumbers) ?>;
<?php foreach ($listNumbers as $item): ?>
   var xmlData = 'Ths is the ET API call';
   $.post('ET url for API call'+xmlData, null, function() {
       xhrCount--;
       if (xhrCount === 0) {
           location.href = 'myurl'
       }
   });      
<?php endforeach; ?>  
上面的方法不起作用,因为它将立即被调用,因为您停留在同一页面上(已经准备好了)。AJAX调用是异步的,所以它不会等到请求完成

您可以使调用异步,也可以使用ajax请求的成功回调

为了更好地澄清:

$(document).ready(function(){})在DOM准备就绪时触发(例如,有点像页面已加载,而我已准备好进行其他操作(例如,附加事件侦听器))。您要做的是使用
.post()
的回调,如:

$.post('ajax/test.html', function(data) {
  // this only gets called when the ajax request is finished
});

但真正的问题仍然存在:为什么要使用PHP循环来构建AJAX请求。这完全没有道理。您仍然在使用PHP构建页面,因此为什么不同时添加使用AJAX获取的内容呢?

您可以尝试以下
var jqxhr=$.post('ET url for API call'+xmlData)

循环后:

jqxhr.complete(function(){
  location.href = "thank you url";
});
您可以在中阅读jqXHR状态函数


但你可能想改变你的整个方法。也许您的PHP应该输出一个javascript数组,页面可以循环。您想实现什么?

使用PHP循环并创建jQuery$.post。。为什么?必须有更好的方法来做你正在做的事情!如果订阅脚本在您的站点上,您应该在一篇文章中向其发送一组复选框,以减少服务器上打开的连接数量。如果订阅脚本位于其他服务器上,由于跨域脚本限制,浏览器将阻止发布。OP希望调用
location.href
,如果XHR未完成,将取消XHR。这就是为什么XHR调用应该是异步的,或者
location.href
应该在成功回调中。我上面说的有什么不对?要么我误解了你,要么你不明白。你提到的回调是针对文档准备好的时候,而不是针对
$.post
完成的时候。不,我指的是如上所述的AJAX函数回调。没有准备好文档,因为正如我在回答中所说的那样,这不起作用。我明白了,你的
$。ready
代码非常突出,让我觉得你建议使用回调,向上投票以抵消我以前的不投票,但这个回答仍然没有解释如何做。有多个回调被调用,您需要跟踪它们是否都已完成。我将尝试一下abouve代码。等待确认。。。非常感谢你的帮助@mkrisch这并没有解决这样一个事实,即有多个
$。正在调用post
,您需要等待所有调用完成。请看我的回答希胡安。。我在用你的密码。我已经让它工作了。。。大部分。我必须更改var xhrCount=;到var xhrCount=;循环运行,结果显示在精确的目标中,但位置href不起作用。我得到一张空白页。我现在正在进行故障排除。当我更改xhrCount=;时,它会工作;到xhrCount=2;硬代码。计数函数不起作用。可能是我的php版本。似乎代码正在崩溃。我添加了一个警报来跟踪循环。var xhrCount=;var xmlData='这是ET API调用';$。post('API调用的ET url'+xmlData,null,function(){xhrCount--;if(xhrCount==0){location.href='myurl'}})
count()
应该可以工作,什么样的变量是
$listNumbers
,您不能使用
,您必须调用echo,
我建议使用的更简单语法,相当于echo语句。确保您测试了IsolationCount($listNumbers)
中返回的内容。代码似乎正在中断。我添加了一个警报来跟踪foreach循环启动后的循环。我得到了第一个结果。然后就结束了。它永远不会到达目的地。我还将else location href添加到if(xhrCount==0)中,以查看代码是否达到了这个程度。有什么想法吗?在每个
$中添加调试。发布
回调,以便知道
xhrCount
的当前值。当你不能弄清楚到底发生了什么,你必须一步一步地检查代码,找出哪一行行为不正确,“然后它退出”并不表明你已经试着调试它了。让我再看一看。马上回来
$(document).ready(function() { }); // this is NOT the callback of the AJAX request
$.post('ajax/test.html', function(data) {
  // this only gets called when the ajax request is finished
});
jqxhr.complete(function(){
  location.href = "thank you url";
});