簡體   English   中英

Python和AJAX-HTTP響應

[英]Python and AJAX - HTTP Response

我正在嘗試用python腳本回答ajax請求。 ajax-request發送一個json-object,如下所示:

$.ajax({
     url : "cgi-bin/mycgi.py",
     type : "POST",
     data : JSON.stringify(MyJSONObject),
     success : function() {...do something},
     error : function(xhr,errmsg,err) {
           alert(xhr.status);
     }
}

我的Python腳本mycgi.py具有以下幾行:

import sys
import simplejson as json

...

myjson = json.loads(sys.stdin.read())

#do something with the object

mystatus = "200 OK"

sys.stdout.write("Status: %s\n" % mystatus)
sys.stdout.write("Content-Type: application/json")
sys.stdout.write("\n\n")
sys.stdout.write(json.dumps(myjson))

基本上,一切正常。 我的瀏覽器獲取響應,並識別-如果狀態設置為“ 200 OK”-請求成功,並在成功部分中使用返回的對象運行命令。

但是我有兩個問題:

  1. 如何獲取腳本以通過錯誤消息返回錯誤? 我可以返回“ 404”而不是“ 202 OK”,並且我的瀏覽器意識到存在錯誤。 但是我不知道如何返回錯誤消息。 我是否必須將此消息放在響應的標題中?
  2. 我想知道,我在客戶端和服務器之間的通信方式是否“太簡單”並且可能太冒險了。 當我在這里閱讀其他類似問題時,我看到人們使用python模塊(例如“ request”)或從BaseHTTPRequestHandler派生一個類。 我想讓我的python腳本盡可能簡單。 是出於某種原因,也許出於某種原因?

非常感謝!

第一個問題:

與將狀態代碼設置為200的響應類似,您可以在返回其他狀態代碼時向響應添加內容。 根據狀態碼,您應該在內容中添加詳細信息和/或添加其他標題,以防您遵循標准的http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

在JavaScript中,您可以為來自ajax調用的響應的特定狀態代碼或處理過程中的所有錯誤設置處理程序。 有關詳細信息,請參見http://api.jquery.com/jQuery.ajax/ 在這些處理程序中,您可以訪問響應內容並顯示消息:

$.ajax({
   url : "cgi-bin/mycgi.py",
   type : "POST",
   data : JSON.stringify(MyJSONObject),
   success : function() {...do something},
   error : function(xhr,errmsg,err) {
       // show status code and response content
       alert(xhr.status + ": " + xhr.responseText);
   }
}

如果您想返回HTML並顯示它,只需將響應轉換為jQuery對象。

var response = $(xhr.responseText);

關於第二個問題:

我個人更喜歡使用現有工具,而不是自己一個人處理應用程序的低級部分。 當使用隱藏不必要的復雜性和樣板的庫時,我認為有很多好處。 只是一個簡短的清單,事情在我的頭上:

  1. 我不想重新發明輪子
  2. 使用其他成千上萬的開發人員使用的庫時的錯誤更少
  3. 使用高級抽象時,我自己的代碼有所改進
  4. 使用知名圖書館的互聯網上的好例子
  5. 未來的需求通常已經滿足

因此,在您的情況下,我什至會更進一步,並介紹一個苗條的Python Web應用程序框架。 但這當然取決於您的應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM