使用Ajax和onsubmitForm时,Foreach仅从数组中输出一个值

时间:2013-09-01 01:34:20

标签: php jquery ajax foreach

我有一个调用Twitter 1.1 API的PHP脚本,并返回50个ID号。然后我使用Foreach参数将结果单独打印到页面上。我希望将每个不同的ID号存储在按钮中作为隐藏值,然后使用JQuery Ajax将该值发布到不同的PHP页面以进行进一步处理,而无需离开或刷新50个ID号的页面。

如果我使用这个Foreach参数,50个ID号是数组中的第一个结果,而不是50个个人ID号,这不是我想要的:

foreach ($Results as $arrResult) {
    $IDstring = $arrResult['id_str'];
    print("<form id='RT' onsubmit='return submitForm();'>
               <input type='hidden' name='id' value=$IDstring>
               <input type='submit' value='ReTweet'></form>
    ");
}

但是,如果我从Foreach参数中删除此部分,则会将50个单独的ID号打印到表单的隐藏值中:

onsubmit='return submitForm();'

问题是我的JQuery脚本正在侦听submitForm,如果没有该行,JQuery将无法运行。这是我的JQuery脚本:

<script>
function submitForm() {
    $.ajax({type: 'POST', url: 'results.php', data: $('#RT').serialize()});

    return false;
}
</script>

我知道删除onsubmit ='return submitForm();'从Foreach给我50个唯一的ID号,因为这段代码将打印50个按钮,每个按钮包含单独的值。但是因为没有jQuery脚本监听submitForm,我必须添加 method ='post'action ='results.php 以便POST按钮的值,但这意味着页面results.php加载这不是我想要的:

foreach ($Results as $arrResult) {
    $IDstring = $arrResult['id_str'];
    print("<form id='form' method='post' action='results.php'>
               <input type='hidden' name='id' value=$IDstring>
               <input type='submit' value='ReTweet'></form>");
}

所以,我希望foreach打印50个唯一的ID号,同时也让我使用JQuery Ajax脚本。我希望这很清楚,我不知道如何描述我想做的事情:D

2 个答案:

答案 0 :(得分:2)

好的,现在我明白你要做什么了。我会这样做。

PHP:

<?php
foreach ($results as $arrResult) {
    $tweetId = $arrResult['id_str'];
    print('<button type="button" class="mark-tweet" data-tweet-id="' . $tweetId . '"><br/><br/>');
}

JavaScript的:

$(function() {

    $('.mark-tweet').click(function() {
        var id = $(this).attr('data-tweet-id');
        $.ajax({
            type: 'POST',
            url: 'results.php',
            data: {tweetId : id}
        });
    })
      .done(function() {
          alert('The tweet has been deleted');
       })
      .fail(function() {
          alert('Oops, something went wrong! Please try again.');
      });

});

注意:我没有像你那样大写$ Results中的'r'。只有类名应以大写字母开头(类在OOP中,而不是CSS)

答案 1 :(得分:0)

好的,我们现在有你了。您正在使用ID,这很简单。

你需要呈现的是带有onclick的50个按钮,它们将调用你的markTweet() JS功能&amp;传递它的ID - 这可以做AJAX帖子。无需任何表格。

或者,您可以使用单独的ID('form'。$ tweetId)渲染50个表单,每个表单都有一个隐藏的输入&amp;提交按钮(或只是一个<button>,因为BUTTON元素可以具有与其内容不同的名称和值),以及调用`postTweetForm('form $ {tweetId})'的onclick - - 从而将所选表单的ID传递给JS函数。

真的,既然你是用JS做的,那么保持用户界面简单&amp;让JS做这项工作最简单。这是一个开始的例子。 PHP:

foreach ($Results as $arrResult) {
    $tweetId = $arrResult['id_str'];
    print("<button type='button' onclick='markTweet('".$tweetId."');'><br>\n");
}

使用Javascript:

function markTweet (tweetId) {
    $.post({
        url: 'results.php', 
        data: {'tweetId': tweetId}
    );
}

你还应该在你的AJAX帖子中加入一个success处理程序。淡入一点点绿色标记或其他东西,以便用户知道它有效,因为它并不总是如此。 (我会让你玩这个。)

试试..然后继续提问。它现在大大改善了也许可以帮助别人。