【问题标题】:jquery $.post with Twitter API works, but callback function is not returning data带有 Twitter API 的 jquery $.post 有效,但回调函数不返回数据
【发布时间】:2020-08-24 02:53:54
【问题描述】:

我的页面上有一个表单,我在其中键入一条消息,该消息使用 Twitter API(通过 Simple PHP Wrapper for Twitter API v1.1)发布推文。推文已成功发布。但是,我想在 div 窗口中显示 php 输出,但到目前为止一直没有成功。

我只是想看看是否可以使用回调中的“数据”从控制台中的 $.post 获得响应。根据我正在阅读的内容,如果成功,那应该包含来自$.post 的响应。但是,我的控制台没有任何输出。

这是我的全部脚本:

    <script>
        $(document).ready(function(){
            $("#tweetButton").click(function(){
                var data = $('#tweetMsg').serialize();
                $.post('Tweet.php', data, function(data){
                    console.log(data);
                }, 'html');
            });
        });
    </script>

这是表格:

    <form>
        <label for="tweetMsg">Enter Your Message:</label>
        <textarea id="tweetMsg" name="tweetMsg" rows="4" cols="50"></textarea>
        <input type="submit" id="tweetButton" class="button" name="tweet" value="Send Tweet">
    </form>

PHP 文件已成功将推文发布到我的帐户,并自行查看,确实返回了请求的内容。

<?php

    require("TwitterAPIExchange.php");
    require("config.php");

$message = $_POST["tweetMsg"];
$settings = array(
    'oauth_access_token' => TWITTER_ACCESS_TOKEN,
    'oauth_access_token_secret' => TWITTER_ACCESS_TOKEN_SECRET,
    'consumer_key' => TWITTER_CONSUMER_KEY,
    'consumer_secret' => TWITTER_CONSUMER_SECRET,
);

$url = 'https://api.twitter.com/1.1/statuses/update.json';
$requestMethod = 'POST';
$apiData = array(
    'status' => $message

);

$twitter = new TwitterAPIExchange($settings);
$twitter -> buildOauth($url, $requestMethod);
$twitter -> setPostfields($apiData);
$response = $twitter -> performRequest(true, Array (CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0));

echo '<pre>';
print_r (json_decode($response, true));

?>

感谢您的帮助!

【问题讨论】:

  • 您没有阻止默认表单提交。尝试使用&lt;button type="button" 而不是&lt;input type="submit"
  • 这能回答你的问题吗? Stop form refreshing page on submit
  • 好的,这完全有道理 - 我的控制台没有显示任何内容,因为它正在刷新页面,所以它被擦干净了,对吗?

标签: jquery .post


【解决方案1】:

尝试使用$.ajax 并在单击推文按钮时使用preventDefault() 停止页面reloading

使用此代码:

$(document).ready(function() {
  $("#tweetButton").click(function(e) {
    e.preventDefault()
    var data = $('#tweetMsg').serialize();
    $.ajax({
      url: "Tweet.php",
      type: "post",
      dataType: 'html',
      data: data,
      success: function(response) {
        console.log(response)
      },
      error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus, errorThrown);
      }
    });
  });
});

【讨论】:

  • $.post() 只是$.ajax()method: 'POST' 的别名
  • @Phil 我知道但只是尝试:) 可能有助于解决问题。
  • 谢谢你们!为了它,我只是把这段代码替换进去,它就可以工作了。我什至现在让它填充在我的 div 中。我很感激!
猜你喜欢
  • 2020-02-22
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
相关资源
最近更新 更多