【问题标题】:jQuery, how to loop through an array with ajax only oncejQuery,如何只用ajax循环一次数组
【发布时间】:2015-02-09 08:43:14
【问题描述】:

我有这个jQuery 函数,它从wp_localize_script 声明中读取值。

<script type='text/javascript'>
/* <![CDATA[ */
var assjs = {"action":"get_ass_counts","path":"http:\/\/localhost\/wordpress-dev\/wp-content\/plugins\/advanced-social-status","_wpnonce":"2f3686b7ca","networks":"fblike,fbshare","ajax_url":"http:\/\/localhost\/wordpress-dev\/wp-admin\/admin-ajax.php"};
/* ]]> */
</script>

我最感兴趣的查询部分是"networks":"fblike,fbshare"

在一个单独的 JavaScript 文件中我有这个函数:

AJAX 脚本

$('.advanced-social-status form').on('submit', function(e) {

    e.preventDefault();

    // Array of social networks
    var social_networks = [assjs.networks];

    // cancel previous requests
    if (asswxhr) asswxhr.abort();

    $.each(social_networks, function(key){
        asswxhr = $.ajax({
            type: "POST",
            url: assjs.ajax_url,
            data:{
                action: assjs.action,
                _wpnonce: assjs._wpnonce,
                network: social_networks,
            },
            success: function(data) {
                console.log(data);
                $results.html(data);
            },
            beforeSend: function() {

                $(".ass-fbshare").html('<img style="margin-left:50px;" src="'+assjs.path+'/images/ajax-loader.gif" />');
            }
        });

    });

    return false;
});

我想要实现的是为 "networks":"fblike,fbshare" 获取每个单独的社交网络功能,我在 jQuery 中将其引用为 assjs.networks 并循环处理并处理一次。

目前它会将两个社交网络对象都发布到我处理 ajax 请求的 PHP 脚本中。

PHP 脚本

$socialnetwork = trim(stripslashes($_POST['network']));

如果我在我的 PHP 处理脚本中 var_dump($_POST); 我会得到这些结果:

array(4) {
  ["action"]=>;
  string(14) "get_ass_counts"
  ["_wpnonce"]=>;
  string(10) "2f3686b7ca"
  ["network"]=>;
  array(1) {
    [0]=>;
    string(14) "fblike,fbshare"
  }
  ["s"]=>;
  string(0) ""
}

有没有一种方法可以分离或分解jQuery 文件中的社交网络名称,使其只传递每个社交网络名称一次?

谢谢

【问题讨论】:

  • 所以在您的数组 social_network 中有重复项,您想删除它们吗?
  • 您在 Ajax 中进行多次调用是否有原因?为什么不通过网络向 php 代码发出单个请求并在 php 中执行所有故障,这样您将始终同时在 php 代码中拥有所有这些故障
  • @Geohut,我可能走错了路,但脚本的目的是为各种社交网络调用 follower 计数。他们检索数据的速度可能很慢,所以我认为这样做可能是正确的方式。
  • @aktiv-coder,不想删除它们。我想从字符串中的值中提取每个单词,例如fblikefbshare

标签: php jquery arrays ajax loops


【解决方案1】:

你可以使用 split 来实现它

   var social_networks = [assjs.networks];
   social_networks = social_networks.split(',');

MDN ref

这不是进行多个 ajax 调用的最佳方式,请考虑 Geohut 的建议。

【讨论】:

  • 另外,在拆分并进行一次调用后,您可以使用 CURL 调用或 file_get_contents 或多个其他选项来调用 PHP 中所需的服务并收集数据并传回客户端。
  • 谢谢大家。如果我只是将社交网络名称数组传递给 PHP 处理脚本,请接受 @Geohut 的建议,我是否只需要一个 foreach($_POST['network'] as $network) 来单独处理每个社交网络名称。
  • 一旦拆分并在发送时我建议对其进行 JSON 编码,因为它是一个数组并且最容易这样发送,然后在 PHP 上检查 value isset 然后执行 json_decode($_POST[ '网络'])
  • @Jason 是的,看起来没问题 :)
  • 太棒了,再次感谢大家。我会听取你的建议,只运行 1 个 ajax 查询。我会将名称数组直接发布到 PHP 脚本并以这种方式处理它们。谢谢@aktiv-coder。对于我最初提出的问题,您的回答是完全正确的。就是喜欢 Stackoverflow。
猜你喜欢
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多