如何通过 ajax 传递 Tumblr class object
How to pass a Tumblr class object via ajax
如何在通过 ajax 调用的另一个 php 文件中引用在一个 php 文件中创建的 class object?
我有一个项目使用 Tumblr 的 API 将 post 发到博客
有 2 个文件:tumblr.php
和 ajaxTumblr.php
在 tumblr.php
中创建了一个 Tumblr object:
include_once ("Tumblr/API/Client.php");
include_once ("Tumblr/API/RequestException.php");
include_once ("Tumblr/API/RequestHandler.php");
$consumerKey = "xxxxxx";
$consumerSecret = "xxxxxx";
$client = new Tumblr\API\Client($consumerKey, $consumerSecret);
$requestHandler = $client->getRequestHandler();
$requestHandler->setBaseUrl('https://www.tumblr.com/');
然后它通过 oauth 序列,以 $client
完全填充访问令牌 & token_secret 结束。我省略了这个代码,因为它可能不相关。
现在用户已经过验证,我可以做一些事情,比如显示用户的信息
$info = $client->getUserInfo();
甚至用一些预设数据制作 post。
$postData = array('title' => $title, 'body' => $body, 'format' => $format);
$client->createPost($userid, $postData);
到目前为止,还不错。
现在,我通过文本区域从用户(标题和博客文本)收集数据,并使用此信息
向 ajaxTumblr.php
发送 ajax 请求
$.ajax({
url: 'http://domain.com/ajaxTumblr.php',
type:'POST',
async: "false",
data: {'title': title,
'body': body,
'userid': userid,
'state': "draft",
'format': "html" },
success: function (res) {
console.log (res);
}
});
这就是我卡住的地方。
我们如何传递、引用或重新创建 ajax php 文件中的 $client
?我无法生成新的 Tumblr object,因为它需要用户授权。
我想让我的代码执行如下操作:
$title = $_REQUEST['title'];
$body = $_REQUEST['body'];
$format = $_REQUEST['format'];
$userid = $_REQUEST['userid'];
$postData = array('title' => $title, 'body' => $body, 'format' => $format);
$client->createPost($userid, $postData);
谢谢。
更新
在Tumblr.php
中,我保存了$client
:
$_SESSION['client'] = serialize($client);
然后在ajaxTumblr.php
新建一个object,把原来的object复制到新的object。这样可以吗?
include_once ("Tumblr/API/Client.php");
include_once ("Tumblr/API/RequestException.php");
include_once ("Tumblr/API/RequestHandler.php");
// OAuth Consumer Key:
$consumerKey = "xxxxxxx";
$consumerSecret = "xxxxxxxx";
$ajaxClient = new Tumblr\API\Client($consumerKey, $consumerSecret);
$client = unserialize($_SESSION['client']);
$ajaxClient = $client;
当我重新运行测试时,class 模块之一抛出了数千个错误,抱怨参数不正确。我可能在正确的道路上,但需要确认。
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_add_handle() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 181
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_exec() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 238
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_info_read() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 254
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_exec() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 238
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_info_read() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 254
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_exec() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 238
在 Tumblr 应用程序设置中,它要求你 "Default callback URL"。这设置为 "tumblr.php"
,因此应用程序可以执行身份验证活动。
问题似乎是在 ajaxTumblr.php
尝试执行 API 调用时出现的。回调不等于调用模块。
此外,$client
和 $ajaxClient
对象之间存在细微差异。其中一个元素中存在空资源,导致出现如上所示的错误。
由于这些问题阻碍了我,我决定放弃 ajaxTumblr.php
并将 ajax 调用中的 URL 指向 tumblr.php
(即它本身)并添加顶部的一些逻辑来检测这是否是一个 $_POST
请求。
因此,$client
对象是相同的,我设法将应用程序 post 放到了我的 Tumblr 博客上。
这是我在 tumblr.php
中添加的代码片段
if (isset($_POST['blogTitle'])){
$token = $_SESSION['token'] ;
$secret = $_SESSION['secret'] ;
$client = new Tumblr\API\Client($consumerKey, $consumerSecret, $token, $secret);
$blogName = $_POST['blogName'];
$blogTitle = $_POST['blogTitle'];
$blogBody = $_POST['blogBody'];
<snip>
$postData = array('title' => $blogTitle, 'body' => $blogBody, 'format' => $format, 'state' => $state );
$res = $client->createPost($blogName, $postData);
exit;
}
如何在通过 ajax 调用的另一个 php 文件中引用在一个 php 文件中创建的 class object?
我有一个项目使用 Tumblr 的 API 将 post 发到博客
有 2 个文件:tumblr.php
和 ajaxTumblr.php
在 tumblr.php
中创建了一个 Tumblr object:
include_once ("Tumblr/API/Client.php");
include_once ("Tumblr/API/RequestException.php");
include_once ("Tumblr/API/RequestHandler.php");
$consumerKey = "xxxxxx";
$consumerSecret = "xxxxxx";
$client = new Tumblr\API\Client($consumerKey, $consumerSecret);
$requestHandler = $client->getRequestHandler();
$requestHandler->setBaseUrl('https://www.tumblr.com/');
然后它通过 oauth 序列,以 $client
完全填充访问令牌 & token_secret 结束。我省略了这个代码,因为它可能不相关。
现在用户已经过验证,我可以做一些事情,比如显示用户的信息
$info = $client->getUserInfo();
甚至用一些预设数据制作 post。
$postData = array('title' => $title, 'body' => $body, 'format' => $format);
$client->createPost($userid, $postData);
到目前为止,还不错。
现在,我通过文本区域从用户(标题和博客文本)收集数据,并使用此信息
向ajaxTumblr.php
发送 ajax 请求
$.ajax({
url: 'http://domain.com/ajaxTumblr.php',
type:'POST',
async: "false",
data: {'title': title,
'body': body,
'userid': userid,
'state': "draft",
'format': "html" },
success: function (res) {
console.log (res);
}
});
这就是我卡住的地方。
我们如何传递、引用或重新创建 ajax php 文件中的 $client
?我无法生成新的 Tumblr object,因为它需要用户授权。
我想让我的代码执行如下操作:
$title = $_REQUEST['title'];
$body = $_REQUEST['body'];
$format = $_REQUEST['format'];
$userid = $_REQUEST['userid'];
$postData = array('title' => $title, 'body' => $body, 'format' => $format);
$client->createPost($userid, $postData);
谢谢。
更新
在Tumblr.php
中,我保存了$client
:
$_SESSION['client'] = serialize($client);
然后在ajaxTumblr.php
新建一个object,把原来的object复制到新的object。这样可以吗?
include_once ("Tumblr/API/Client.php");
include_once ("Tumblr/API/RequestException.php");
include_once ("Tumblr/API/RequestHandler.php");
// OAuth Consumer Key:
$consumerKey = "xxxxxxx";
$consumerSecret = "xxxxxxxx";
$ajaxClient = new Tumblr\API\Client($consumerKey, $consumerSecret);
$client = unserialize($_SESSION['client']);
$ajaxClient = $client;
当我重新运行测试时,class 模块之一抛出了数千个错误,抱怨参数不正确。我可能在正确的道路上,但需要确认。
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_add_handle() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 181
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_exec() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 238
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_info_read() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 254
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_exec() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 238
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_info_read() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 254
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_exec() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 238
在 Tumblr 应用程序设置中,它要求你 "Default callback URL"。这设置为 "tumblr.php"
,因此应用程序可以执行身份验证活动。
问题似乎是在 ajaxTumblr.php
尝试执行 API 调用时出现的。回调不等于调用模块。
此外,$client
和 $ajaxClient
对象之间存在细微差异。其中一个元素中存在空资源,导致出现如上所示的错误。
由于这些问题阻碍了我,我决定放弃 ajaxTumblr.php
并将 ajax 调用中的 URL 指向 tumblr.php
(即它本身)并添加顶部的一些逻辑来检测这是否是一个 $_POST
请求。
因此,$client
对象是相同的,我设法将应用程序 post 放到了我的 Tumblr 博客上。
这是我在 tumblr.php
if (isset($_POST['blogTitle'])){
$token = $_SESSION['token'] ;
$secret = $_SESSION['secret'] ;
$client = new Tumblr\API\Client($consumerKey, $consumerSecret, $token, $secret);
$blogName = $_POST['blogName'];
$blogTitle = $_POST['blogTitle'];
$blogBody = $_POST['blogBody'];
<snip>
$postData = array('title' => $blogTitle, 'body' => $blogBody, 'format' => $format, 'state' => $state );
$res = $client->createPost($blogName, $postData);
exit;
}