2013-01-23 58 views
1

我有一個web應用程序,它使得使用Codeigniter-php代碼的服務器發出Ajax請求。 Ajax請求在本地服務器中正常工作,但在應用程序駐留在遠程服務器中時不能正常工作。 控制檯錯誤是:Ajax請求在遠程服務器中工作,但不在本地服務器中(使用Codeigniter)

XMLHttpRequest cannot load http://localhost/CI-example/index.php/control/controlHome. Origin http://www.page.com is not allowed by Access-Control-Allow-Origin. 

出人意料的是,請求在服務器發出但沒有迴應。

,我使用Ajax請求的網址是:

AJAX_URL = "http://localhost/CI-example/site/index.php/control/controlHome"; 

不過,我也已經試過:

AJAX_URL = "http://www.page.com/CI-example/site/index.php/control/controlHome"; 

而接下來的錯誤都會被抓住:

POST http://www.page.com/webdom/site/index.php/control/controlHome 500 (Internal Server Error) 

我該怎麼辦?

編輯: www.page.com是一個子域名。當一個子域用於Ajax請求時,有必要進行一些配置嗎?

和文件夾組織是:

/CI-example 
---/application/controllers/control.php 
---/system 
---/site/js/ajaxRequest.js 
+0

你嘗試過'AJAX_URL =「/CI-example/site/index.php/control/controlHome」嗎?您不需要包含主機名稱,因爲AJAX僅對內部請求有效。 –

+0

你有可能重定向嗎?嘗試在單獨的選項卡中調用URL並查看開發人員工具的網絡選項卡。 – Thomas

+0

@AustinMullins,我試過了,錯誤是 – vicenrele

回答

0

可以使用AJAX到不同的域不會讓HTTP POST請求,除非該頁面允許你這樣做,用所謂的「訪問控制 - 允許 - 特殊的頭起源」。

localhost與page.com不同,這就是爲什麼這不起作用。

+0

但與「page.com」不起作用 – vicenrele

+0

如果源請求源於與目標請求域相同的域,則無法獲得該錯誤。 – Dean

+0

也是。但我得到那個錯誤 – vicenrele

0

http://www.page.com的網址的回覆表示頁面執行期間出現問題。你的PHP錯誤日誌應該可以幫助你找到什麼。

添加行ini_set('display_errors', 1)可能會將錯誤返回給錯誤處理程序中的ajax請求。不要忘記在使用後刪除該行,您不希望在生產代碼中出現這種情況。

0

第二個錯誤是:500 (Internal Server Error)

這意味着有在服務器端錯誤 - 不是一個跨域政策問題。
這可能是PHP腳本執行中的錯誤。

檢查您的錯誤日誌(例如:如果你使用標準的LAMP堆棧,錯誤日誌應該是介於/var/log/apache2/

0

試試這個,

http://localhost/CI-example/index.php/control/controlHome 

,而不是

http://localhost/CI-example/site/index.php/control/controlHome 

在您的ajax網址。 從您的文件夾結構來看,不需要在您的URL中包含「站點」

1

當我到達這裏時,當您向服務器發送一個AJAX請求時,它將返回500 (Internal Server Error)。我敢肯定,錯誤是從服務器端,並有可能成爲繼reason-

  1. 如果一切都在代碼罰款,那麼可能是你base_url是您請求的不同。是的,這可能會導致問題,例如,如果您託管了您的Web應用程序,並且您的base_urlwww.mysite.com,並且您正在請求mysite.com
  2. 下一個原因可能是,您已經在Windows或任何系統中開發了您的項目,但是當您將上傳到任何類似linux的服務器而不是每個文件名都將區分大小寫。例如,假設您給出的模型文件名是MyModel.php,但是當您加載模型時,它將生成類似無法找到特定類的錯誤。
相關問題