Php 使用Ajax和onsubmitForm时,Foreach仅从数组中打印一个值

Php 使用Ajax和onsubmitForm时,Foreach仅从数组中打印一个值,php,jquery,ajax,foreach,Php,Jquery,Ajax,Foreach,我有一个PHP脚本,它调用Twitter1.1API,并返回50个ID号。然后我使用Foreach参数将结果单独打印到页面上。我希望将每个不同的ID号作为隐藏值存储在按钮中,然后使用jQueryAjax将该值发布到不同的PHP页面以进行进一步处理,而无需离开或刷新包含50个ID号的页面 如果我使用这个Foreach参数,50个ID号都是数组中的第一个结果,而不是50个单独的ID号,这不是我想要的: foreach ($Results as $arrResult) { $IDstring

我有一个PHP脚本,它调用Twitter1.1API,并返回50个ID号。然后我使用Foreach参数将结果单独打印到页面上。我希望将每个不同的ID号作为隐藏值存储在按钮中,然后使用jQueryAjax将该值发布到不同的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 ($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>");
}
问题是我的JQuery脚本正在侦听submitForm,如果没有这一行,JQuery将无法运行。以下是我的JQuery脚本:

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

    return false;
}
</script>

函数submitForm(){
$.ajax({type:'POST',url:'results.php',data:$('#RT').serialize()});
返回false;
}
我知道删除onsubmit='return submitForm();'从Foreach中给我50个唯一的ID号,因为此代码将打印50个按钮,每个按钮将包含单独的值。但是因为没有JQuery脚本监听submitForm,我必须添加method='post'action='results.php,以便发布按钮的值,但这意味着页面results.php会加载,这不是我想要的:

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 ($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($Results作为$arresult){
$IDstring=$arrResult['id_str'];
打印(“
");
}

因此,我希望foreach打印50个唯一的ID号,同时还允许我使用jQueryAjax脚本。我希望这是清楚的,我不知道如何描述我想做的事情:好的,我们现在有你了。你在正确的轨道上使用ID,这是直截了当的

需要呈现的是带有
onclick
的50个按钮,它们将调用
markTweet()
JS函数并将ID传递给它,这可以完成AJAX post。不需要表格

或者,您可以使用单独的ID('form'.$tweetId')呈现50个表单,每个表单都有一个隐藏的input&submit按钮(或者只有一个
,因为button元素可以有一个与其内容不同的名称和值),以及一个调用`postTweetForm('form${tweetId})的
onclick
'--从而将所选表单的ID传递给JS函数

实际上,由于您是在JS中完成的,因此保持UI简单&让JS来完成工作是最简单的。下面是一个开始的示例。PHP:

foreach ($Results as $arrResult) {
    $tweetId = $arrResult['id_str'];
    print("<button type='button' onclick='markTweet('".$tweetId."');'><br>\n");
}
您还应该在AJAX帖子中加入一个
success
处理程序。。淡入一点绿色记号或其他东西,这样用户就知道它起作用了,因为它并不总是起作用。(我会让你玩的。)


试试看。。继续提问。现在情况有了很大的改善&也许可以帮助其他人。

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

PHP:


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

使用此选项可以得到多少个表单?只有一个??或者问题是,对于其他评估师,你们得到的是空值。托马斯教授,我对编码非常陌生,所以很难知道如何为其他人简洁。我正在写问题,将编辑帖子。我不知道这是否更有意义。无论如何我都得去睡觉,但谢谢你的建议托马斯:)所以,现在我完全明白你的意思了。我查看了页面源代码,其中有50个唯一的ID,但是单个ID='retweets'呈现了50次,这意味着JQuery脚本将它们都视为一个值。它正常工作,我只是希望它能做它不能做的。我将删除我的问题。我想我只是用我的愚蠢来烦扰别人。嗨,托马斯,非常感谢你提供的信息,这很有道理。我粘贴了你的PHP和Javascript代码片段,但它不起作用。我将results.php上的POST变量名更改为$_POST['tweetID'],以匹配Javascript中的数据名,但仍然没有成功。我已经编写了一个.done()命令来创建一条警报消息,但是在我能够让ajax正常工作之前,我没有使用它。Neil发布了一个可以正常工作的脚本版本\o/但是我要感谢您以一种有意义的方式解释这一点,并感谢您的耐心,我真的很感谢你的帮助:)嗨,尼尔:)我做的和你说的完全一样,当我批量删除推特和消息时,但我想能够选择转发哪些推特。因此,我可以将每条推文打印为文本,并在下方有一个按钮,如果我愿意,可以转发它。因此,有了一个列,我可以通过单击按钮来指定,而不是大量转发所有ID号。我可以使用一个不可见的iframe来完成,当单击按钮时,它也会弹出。但是我正在尝试使用JQuery脚本。后端的键总是需要的,以确定您实际上在谈论哪些数据。没有,你就无法建立一个系统。@KustomJack不要放弃,你离我们太近了!:-)我现在修改了我的答案,以便更好地理解你们的要求。请试一试。祝你好运!噢,Neil,mark tweet函数工作得很好,ID被发送到results.php,并成功地从那里再次发布到API。非常感谢:D.done函数没有运行,但我有一个工作版本,将把该代码集成到我的学习过程中。另外,我在结果中降低了R的情况:)说真的,多亏了你和@Thomas W,现在我有了一个工作模型,并且理解了它为什么工作。
<?php
foreach ($results as $arrResult) {
    $tweetId = $arrResult['id_str'];
    print('<button type="button" class="mark-tweet" data-tweet-id="' . $tweetId . '"><br/><br/>');
}
$(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.');
      });

});