2012-06-21 3 views
0

Я пытаюсь передать параметры в API TinyPaste. У меня есть следующий JQuery скрипт в HTML-файл,JQuery .post() не возвращает данные

$.post("http://tinypaste.com/api/create.json", 
    { 
    "paste": "This is test paste", 
    "title": "Test", 
    "is_code": 0, 
    "is_private": 1 
    }, 
    function(data) { 
     console.log(data); 
    } 
); 

Как видно в веб-консоли в Firefox, я могу видеть, что запрос был сделан и успешно (Длина содержание ответа, как и ожидалось). Но функция обратного вызова ничего не печатает в окне консоли.

Что я здесь делаю неправильно?

+0

Пожалуйста, сообщите нам, где вы работаете. Некоторое расширение? Или обычная веб-страница? Потому что есть запрос перекрестного домена. Или, если вы прибегаете к GET, вы можете просто превысить максимальную длину. – SuperSaiyan

+0

Нет. Я работаю на обычной веб-странице. –

+0

В этом случае POST ('$ .post') не будет работать. Что касается методов GET-ish (то есть, если вообще есть какой-то хак, поскольку JSONP также не поддерживается), вы скоро исчерпаете максимальную длину при отправке длинных кодов. – SuperSaiyan

ответ

0

вы должны написать, как этот

$.post("http://tinypaste.com/api/create.json", 
      { 
      'paste': "This is test paste", 
      'title': "Test", 
      'is_code': 0, 
      'is_private': 1 
      }, 
      function(data) { 
       console.log(data); 
      }, 
      'jsonp' 
     ); 

Вы должны послать также тип данных на сервер, означает jsonp.

+0

Но в этом примере http://api.jquery.com/jQuery.post/#example-4 они не используют успех. Почему это так? –

+1

какая разница, если цитаты с параметрами указаны или нет? – charlietfl

+0

Это не имеет значения, это справедливо в формате JSON: { "паста": "Это испытание паста", "Название": "Тест", "is_code": 0, "is_private": 1 } – Baz1nga

0

Похоже, вы делаете запрос на другой домен с вашего сайта, и это нарушает Same Origin Policy из фрезы, вам нужно использовать JSONP работать вокруг этого ..

+0

Нет, если OP работает над некоторым расширением .. :) – SuperSaiyan

0

EDIT: POST не работает междоменного USE $ .getJSON вместо

$.getJSON("http://tinypaste.com/api/create.json", 
    { 
    "paste": "This is test paste", 
    "title": "Test", 
    "is_code": 0, 
    "is_private": 1 
    }, 
    function(data) { 
     console.log(data); 
    } 
); 

вполне возможно API не служит JSONP, в этом случае вам нужно будет прибегнуть к альтернативным методам

+0

Поддерживает ли tinypaste.com JSONP? Я сомневаюсь. – SuperSaiyan

+0

говорит, что он получает данные назад, должен предположить, что это jsonp на данный момент – charlietfl

+0

Не обязательно, если он создает плагин, он может получить сырой JSON тоже .. – SuperSaiyan

0

основная (и единственная) проблема со сценарием, опубликованным в вопросе, заключается в том, что он делает запрос HTTP/POST с перекрестным доменом на обычной веб-странице. Ранее я полагал, что вы работаете над некоторым расширением браузера, которое, если оно правильно настроено, позволит вам иметь междоменные запросы. HTTP/POST просто не будет работать в вашем случае. Хотя есть хаки для работы HTTP/GET, например, с помощью тега script и JSONP.

В вашем случае, я предлагаю, чтобы ваш сервер (который обслуживает вашу страницу) выполнил запрос для вас.

Процесс будет:

  • Вы подаете запрос на сервер с параметрами tinypaste.
  • Сценарий на стороне сервера будет делать HTTP/POST для tinypaste и получать ответ. Этот ответ отправляется в браузер.
  • Браузер получает ответ. (И может быть переадресовывает или что-то)

Или, как @charlietfl предполагает, вы могли бы использовать YQL and Jquery

+0

YQL и JQuery будут отправлять POST или GET запрос? –

+0

Это будет запрос GET. Запрос POST по перекрестному домену невозможен. – SuperSaiyan

Смежные вопросы