1

我有一个调用 Twitter 1.1 API 并返回 50 个 ID 号的 PHP 脚本。然后我使用 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以发布按钮的值,但这意味着页面 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

4

2 回答 2

2

Okay, now I understand what you're trying to do. I would do it like this.

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.');
      });

});

NOTE: I am not capitalizing the 'r' in $Results as you did. Only class names should start in capital letters (class as in OOP, not CSS)

于 2013-09-01T03:16:17.667 回答
0

好的,我们现在有你了。您在正确的轨道上使用 ID,这是直截了当的。

您需要渲染的是 50 个按钮,onclick它们将调用您的markTweet()JS 函数并将 ID 传递给它——并且可以执行 AJAX 发布。无需表格。

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

真的,因为你是在 JS 中做的,所以保持 UI 简单并让 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}
    );
}

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

试试看..并继续提出问题。它现在有了很大的改善,也许可以帮助别人。

于 2013-09-01T01:49:59.873 回答