2012-06-21 143 views
0

我試圖將參數傳遞給TinyPaste API。我有以下的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的Web控制檯看到的,我可以看到請求,而且是成功的(響應的內容長度是如預期)。但回調函數不會在控制檯窗口中打印任何內容。

我在這裏做錯了什麼?

+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

如果param鍵被引用,它會產生什麼不同? – charlietfl

+0

沒關係,這是有效的JSON:{ 「貼」: 「這是考驗貼」, 「稱號」: 「測試」, 「is_code」:0, 「is_private」:1 } – Baz1nga

0

看起來你正在從您的網站另一個域的請求,這違反的browers的同源策略,你需要使用JSONP來解決這個..

+0

如果OP在某些擴展上工作,則不需要。:) – SuperSaiyan

0

編輯:POST不適合工作跨域使用$ .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工作,比如使用腳本標記和JSONP。

就你而言,我的建議是讓你的服務器(服務你的頁面)爲你執行請求。

的過程將是:

  • 您提交請求到服務器與tinypaste參數。
  • 服務器端腳本會執行HTTP/POST來瑕疵,並獲取響應。這個響應被髮送到瀏覽器。
  • 瀏覽器獲取響應。 (也可以是重定向或東西)

或者作爲@charlietfl建議,你可以使用YQL and Jquery

+0

YQL和JQuery將發送POST或GET請求? –

+0

這將是一個GET請求。跨域POST請求是不可能的。 – SuperSaiyan