2012-07-20 57 views
8

我正在寫一個AJAX函數,它從我的JSON Python webservice請求數據。我的Ajax請求的樣子:JSONP web服務與python

url = "http://localhost:8001/blah" 
    $.ajax({ 
     url: url, 
     type: 'get', 
     dataType: 'jsonp', 
     success: function(data) { 
      console.log('hi') 
     } 
    }); 

現在,我的Python Web服務有一個處理請求的功能,「/嗒嗒」具有以下return語句:

return json.dumps({'a':1, 'b':2 }) 

我的AJAX功能沒有成功從我的Python Web服務中獲取響應,但我在Firebug中沒有得到任何錯誤。什麼是我的web服務或JavaScript做錯了?

+2

這不會給你JSONP。 – 2012-07-20 07:36:26

回答

9

當您使用Jquery的JSONP數據類型時,會發生什麼情況:回調函數名稱是作爲URL的一部分作爲GET參數發送的,因此您實際上正在查詢諸如「http:// localhost:8001/blah?回調= json125348274839" 。

從您的網絡服務器您的回答應該是這樣的:

return "%s({'a':1, 'b':2 })" % _GET_PARAMS('callback') 

這樣web服務器將返回的財產以後像 「json125348274839({ 'A':1, 'B':2})」

希望有所幫助!

+0

非常接近。你錯過了兩個細節,一個很糟糕,一個很糟糕。 – 2012-07-22 05:09:14

+0

又快又髒! +1 – loretoparisi 2015-07-31 01:24:54

1

在您的Python Web服務中打開(或添加)日誌記錄。檢查您的Web服務器日誌...您是否收到來自您的JavaScript客戶端的請求?您的Web服務器是否正在記錄它正在返回響應?

可能取決於您使用的框架。這與從處理函數返回字符串一樣簡單嗎?也許處理程序應該返回一個字符串列表,因爲它沒有得到一個列表,它沒有返回給客戶端。查看您的Web服務器日誌中是否有錯誤。

1

您忘記關閉報價和分號在第一線=)

如果沒有幫助,檢查以下內容:

  1. 列表項
  2. 你在使用如蟒蛇服務? Django,燒瓶,別的東西?也許你可以提供Python代碼?
  3. 另外,看看'Net'Firebug的選項卡,並確保實際處理請求到'url'後(不返回404或50x代碼,但200),檢查'響應'子選項卡。

希望這會有所幫助!

+0

謝謝,你明白了! – Michael 2012-07-22 19:17:34

6

扎克明白了。我的JavaScript是正確的。我改變了我的python返回語句如下:

callback = request.args.get('callback') 
return '{0}({1})'.format(callback, {'a':1, 'b':2})