Отправка необработанных многокомпонентных данных через jquery $ .post () и php - PullRequest
0 голосов
/ 07 декабря 2010

Мне нужно отправить необработанные многокомпонентные данные с помощью php POST, но без HTML-формы ... Вместо этого я начинаю процесс с помощью jquery $ .post () (цель состоит в том, чтобы изменить фон аккаунта Twitter).

Как мне этого добиться?Это мой текущий (и все еще неполный) код:

1) Имя файла изображения вставляется в это скрытое поле ввода:

<input type="hidden" id="profile_background_image_url" value="oats.jpg" />

2) при нажатии на кнопку отправки, функция JavaScriptзапускается ... и вызывает:

$.post('helper.php',{
 profile_background_image_url:$('#profile_background_image_url').val()
});

3) helper.php имеет

$param = array();
$param['image'] = '/www/uploads/'.$_POST['profile_use_background_image'];
$status = $connection->post('account/update_profile_background_image',$param);

Примечания :

  1. все фоновые файлы находятся в локальном каталоге / www / uploads .
  2. im, используя библиотеку twitteroauth Авраама Уильямса 0.2

BottomНа третьем шаге мне нужно отправить $ param ['image'] в необработанных многокомпонентных данных в $ connection объект (библиотека twitter).

Есть идеи?

Некоторые ссылки: http://dev.twitter.com/doc/post/account/update_profile_background_image

Ответы [ 2 ]

1 голос
/ 07 декабря 2010

Да, теперь я вижу, что он строит массив полей записей в строку запроса, что означает, что вы должны вручную установить тип содержимого, и что ключ @ в полях image не будет работать, так как он работает только с аргумент массива. Что еще более важно, я не вижу способа изменить заголовки без взлома библиотеки или расширения ее и замены определенных функций.


Я бы попробовал добавить @ к пути к файлу параметра image, например:

$param['image'] = '@/www/uploads/'.$_POST['profile_use_background_image'];

Это удобный способ сделать это с помощью cURL, и похоже, что библиотека в основном использует cURL для выполнения запроса, так что это должно работать.

0 голосов
/ 07 декабря 2010

решено!

curl_setopt($ci, CURLOPT_POST, TRUE);
        if(is_array($files)){
          $post_file_array = array();
          foreach($files as $key=>$value){
             $post_file_array[$key] = "@{$value}";
          }
          curl_setopt($ci, CURLOPT_POSTFIELDS, $post_file_array);
          if (!empty($postfields)) {
            $url = "{$url}?{$postfields}";
          }
        }
        else if (!empty($postfields)) {
          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
        }
...