0

我对 javascript 和 jquery 很陌生。我正在制作一个需要来自 twitter 的数据的网络应用程序。这是我有的两个代码。第一个来自朋友,另一个是我的版本。现在我的版本不工作了。所以这是我的几个问题:

1) 在版本 1 中,为什么我们将 e 传递给函数?2) 为什么我们在 dataType 中使用“jsonp”?3)是什么让我的代码不起作用?

是什么让代码版本 1 工作?

工作版本

$('#input').submit(function(e){
    e.preventDefault();
    e.stopPropagation();
       var hashtag = $(this).find('input[name="hashtag"]').val();
        var twitterapi = "http://search.twitter.com/search.json?";
        jQuery.ajax({
          type: "GET",
          url: twitterapi,
          data: {
            "q": hashtag,
            "rpp": 1000
          },
          dataType: 'jsonp'
        }).done(function (response) {
          var results = response.results;
          for (var i = 0; i < results.length; i++) {
            $("#tweet").append("<p class='tweet'>" +
              "<span class='username'>" +
              results[i].from_user +
              "</span> <span class='tweet_content'> " +
              results[i].text + "</span></p>");
          }
        });

我的版本

var hashtag = $(this).find('input[name="hashtag"]').val();
        var twitterapi = "http://search.twitter.com/search.json?";
        var tweetspresent = results.length;
         jQuery.ajax(
         {
              type: "GET",
              url: twitterapi ,
              data: {"q": hashtag,"rpp":1000},
              dataType: 'jsonp',
            });
        }).done(function(results)
            {
               for(i=0;i<tweetspresent;i++)
                 {
                   $("#tweet").html("<p> Name: " + results[i].from_user + " - " + results[i].text + "</p>");
                 }
            });
});
4

1 回答 1

0

1)“e”代表事件,在这种情况下,它是传递给函数的提交事件对象。您可以在此处找到有关活动的更多信息。是一个更详细的解释,例如 preventDefault 方法的作用。

2) 当您使用来自不同域的 ajax 调用获取数据时(例如 your-website.com 执行从 twitter.com 获取数据的 javascript),我们说的是“跨域”请求。出于安全原因,这是不允许的。有几种方法可以解决这个问题。其中之一是jsonp。使用原生支持CORS的较新浏览器,您不再需要使用 jsonp 类型。

3)你没有说什么不工作,所以首先使用console.log(变量)做一点调试(在现代浏览器中),检查你的完成回调是否被调用,如果是,记录响应以查看是什么结构(或更好地检查 twitter api)。

编辑 您不必将任何东西传递给done函数 - 这仅取决于您的需要。当您执行 jQuery.ajax 函数时,它将执行您告诉它执行的操作,并在完成时返回您可以进一步使用的对象。在您的情况下,您需要一种方法来访问从 Twitter 返回的数据。我强烈建议您多阅读 jQuery ajax

于 2012-12-27T16:32:14.690 回答