2010-03-04 66 views
4

我使用jQuery的.ajax()呼叫服務器(實際上是當地的Django的runserver),並得到迴應。jQuery的反應是在瀏覽器空的,但捲曲的作品

在服務器控制檯上,我可以看到JSON請求時,他正確的JSON響應制成,並且一切正常。

但在我的瀏覽器(在Firefox 3.6和Safari 4.0.4測試,我使用jQuery 1.4.2),似乎響應主體是空的(響應代碼爲200,頭,否則看行)。

測試命令行的響應,我得到我期望的答案。

$ curl http://127.0.0.1:8000/api/answers/answer/1 --data "text=test&user_name=testy&user_location=testyville&site=http%3A%2F%2Flocalhost%3A8888%2Fcs%2Fjavascript_answer_form.html&email_address="
{"answer_permalink": " http://127.0.0.1:8000/questions/1 ", "answer_id": 16, "question_text": "What were the skies like when you were young?", "answer_text": "test", "question_id": "1"}

我正在從一個HTML文件,我的本地機器上沒有被Web瀏覽器服務的請求。這只是使用file://解決。 django服務器也是本地的,默認位置是127.0.0.1:8000。

感謝您的任何建議!

-Jim

+1

你的jQuery看起來像什麼? – Matchu 2010-03-04 21:06:09

+0

照顧張貼一些代碼? – 2010-03-04 21:49:46

+0

下面是我使用發出請求的頁面:http://dpaste.de/Bbjy/ – 2010-03-04 22:40:32

回答

2

除非您特別允許本地文件瀏覽器交替設置,一切仍然受到跨域安全政策的約束。不在域中的文件(如localhost)無法請求來自該域的文件。

我不確定跨域策略如何與端口一起工作;你可能會把這個文件放到你的port-80可訪問的localhost文件夾中(如果你有的話)並完成工作。否則,你會陷入困境,除非你可以改變瀏覽器設置來制定異常(即使我不確定這在任何標準瀏覽器中是否可行)。

+0

OK,所以當我把劇本中我的靜態媒體目錄Django的runserver命令,響應作品裏面! 事情是,張貼始終工作。只有響應是空白的,跨域的,並且僅限於某些客戶端(請記住curl工作)。 如果這是跨域安全模型的一部分,我真的不明白。讓我來發送數據,但沒有收到回覆,在域似乎不是最好的辦法,以防止人們獲得的麻煩。 再說,我是新來的前端編碼,所以請隨時來證明我是錯的。 – 2010-03-04 22:44:08

+0

你是對的 - 這並不合理。 (我會指出'curl'不受跨域策略的影響,因爲它不在任何域上。)當然,通過AJAX進行跨站點通信的真正危險是數據訪問;通過CSRF自動*發送*請求可以通過其他方式輕鬆實現(例如圖像標籤,帶有自動提交表單的iframe),因此,防止類似攻擊應該在不同級別上實施。 – Matchu 2010-03-05 04:13:25

1

添加一個「錯誤:功能(數據){警報(數據);}」,看看你的$就失敗。

1

更改「完成」在你的阿賈克斯()調用「成功」。 '完成'用於表示ajax操作何時完成但沒有提供響應數據。成功的請求會調用「成功」並接收響應。 '錯誤'是'成功'的對應部分,用於錯誤處理。

我認爲瀏覽器(至少有些像Safari瀏覽器,對我來說)把文件送達關閉文件系統作爲可信來源的同源政策的條款。所以這在這裏變成了一個紅鯡魚。

相關問題