0

...当我可以使用直接 URL 访问数据时 » http://www.tumblr.com/api/likes?email=myemail@gmail.com&password=mypassword&debug=1,这给了我正在寻找的帖子:

Array
(
    [posts] => Array
        (
            [0] => Array
                (
                    [id] => 1482002179
                    [url] => http://staff.tumblr.com/post/1482002179
                    [url-with-slug] => http://staff.tumblr.com/post/1482002179/the-new-dashboard-for-iphone
                    [type] => photo
                    [date-gmt] => 2010-11-04 21:19:33 GMT
                    [date] => Thu, 04 Nov 2010 17:19:33
                    [bookmarklet] => 0
                    [mobile] => 0
                    [feed-item] => 
                    [from-feed-id] => 0
                    [unix-timestamp] => 1288905573
                    [format] => html
                    [reblog-key] => 8LVzAqTT
                    [slug] => the-new-dashboard-for-iphone
                    [liked] => 1
                    [note-count] => 2378
                    [tumblelog] => Array
                        (
                            [title] => Tumblr Staff
                            [name] => staff
                            [cname] => 
                            [url] => http://staff.tumblr.com/
                            [timezone] => US/Eastern
                            [avatar_url_16] => http://28.media.tumblr.com/avatar_013241641371_16.png
                            [avatar_url_24] => http://26.media.tumblr.com/avatar_013241641371_24.png

... 等等。

但是,当我尝试使用 jQuery 代码来实现相同的目标时,没有这样的运气,我正在使用这个 GET 请求和经过身份验证的读取,如 Tumblr REST API 文档中所述

   $.GET(
     "http://www.tumblr.com/api/likes", 
     { email: "myemail@gmail.com", password: "mypassword" }
   );

我正在使用 Firebug 监控响应。状态:200 OK。回应:。XML:未找到元素

使用以下方法跟踪响应:

   $.GET(
     "http://www.tumblr.com/api/likes", 
     { email: "myemail@gmail.com", password: "mypassword" },
     function( data ){ 
        alert( data ); 
     }
   );

显示警报消息。

无论我从 file:///、localhost(XAMPP)、我自己的服务器还是从 mysite.tumblr.com 上的主题中运行代码,我都会得到相同的结果。

我错过了什么吗?我可以使用 JavaScript + PHP、cURL 等来实现这一点,但我正在寻找仅限 JavaScript 的解决方案。

4

2 回答 2

1

在我看来,您遇到了Same Origin Policy。您不能使用 Ajax 从任何地方加载数据,您只能从与原始文档(而不是脚本,HTML 文档)相同的来源加载数据。

假设这是问题所在,那么:

如果浏览器和远程站点都支持CORS ,并且远程站点可以接受您的来源,则可以使用它。但请注意,目前只有部分浏览器支持它(IE 仅在您付出特殊努力时才支持它,而其他浏览器支持它作为其XmlHTTPRequest对象支持的一部分,这是 jQuery 的幕后get使用)。

但是,如果 tumblr 支持它,您可能可以使用JSONP.get ,jQuery 在其调用中支持它(不像.GET您的代码示例中那样)。

另一种选择是使用雅虎!查询语言作为跨域代理

于 2010-11-13T09:11:57.820 回答
0

你确定你是200?也许尝试这样做以确保如果一切正常,响应应该 =“成功” - 据我所知,无论结果如何,回调函数都会被调用。

$.GET(
 "http://www.tumblr.com/api/likes", 
 { email: "myemail@gmail.com", password: "mypassword" },
 function( data, response ){ 
    alert( response ); 
 }

);

也许它是一些简单的东西,比如你的 URL 末尾的 /

我通常做这样的ajax帖子

$.post(
 "http://www.tumblr.com/api/likes", 
 { email: "myemail@gmail.com", password: "mypassword" },
 function( data, response ){
    if(response == "success")
    {
        //inject data into page
    }
    else
    {
        alert("Ooops something went wrong... please try again.");
    }

 }

);

$.get 的文档指出:

如果带有 jQ​​uery.get() 的请求返回错误代码,它将静默失败,除非脚本也调用了全局 .ajaxError() 方法。

于 2010-11-13T09:20:16.213 回答