2012-04-18 33 views
0

以下jquery代碼在本地服務器上正常工作,但在遠程服務器上無法正常工作。 FYI遠程服務器正在認識jQuery。我通過My Stackoverflow Qjquery post並獲取遠程服務器上不工作的方法

請檢出問題頁面Merry Flowers Admission Page。當我輸入[email protected]作爲電子郵件ID(在父信息中)並按Tab鍵時,所有後續表單元素應該自動填充。但是這裏沒有這樣做。

以下是來自Chrome的開發者工具的網絡標頭/學生/ get_parent_info:

Request URL:http://www.merryflowers.com/students/get_parent_info 
Request Method:POST 
Status Code:200 OK 
Request Headersview source 
Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Content-Length:52 
Content-Type:application/x-www-form-urlencoded; charset=UTF-8 
Cookie:CAKEPHP=b0103aa50047806a7063301569298541 
Host:www.merryflowers.com 
Origin:http://www.merryflowers.com 
Referer:http://www.merryflowers.com/students/add 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19 
X-Requested-With:XMLHttpRequest 
Form Dataview URL encoded 
data[MerryParent][email]:[email protected] 
Response Headersview source 
Connection:Keep-Alive 
Content-Type:text/html; charset=UTF-8 
Date:Fri, 20 Apr 2012 18:56:03 GMT 

Keep-Alive:timeout=5, max=100 
P3P:CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM" 
Server:Apache 
Transfer-Encoding:chunked 
X-Powered-By:PHP/5.2.17 

網絡響應和預覽:

**************************************** 

僅供參考,我已經證實沒有存在記錄爲[email protected]

在閱讀lazerblade的回答後,我檢查了www和public_html文件夾中的index.php和test.php。我在遠程服務器上的根目錄是/ home/aquinto1。我早已對這些文件進行了更改。我現在在這裏沒有修改任何東西。

下面是我的代碼:

的index.php

if (!defined('ROOT')) { 
    define('ROOT', DS.'home'.DS.'aquinto1'); 
    //define('ROOT', dirname(dirname(dirname(__FILE__)))); 
} 
/** 
* The actual directory name for the "app". 
* 
*/ 

if (!defined('APP_DIR')) { 
    define('APP_DIR','app'); 
    //define('APP_DIR', basename(dirname(dirname(__FILE__)))); 
} 
/** 
* The absolute path to the "cake" directory, WITHOUT a trailing DS. 
* 
*/ 

if (!defined('CAKE_CORE_INCLUDE_PATH')) { 
    //define('CAKE_CORE_INCLUDE_PATH', ROOT); 
    define('CAKE_CORE_INCLUDE_PATH', DS.'home'.DS.'aquinto1'); 

} 

test.php的

if (!defined('ROOT')) { 
    define('ROOT', DS.'home'.DS.'aquinto1'); 
    //define('ROOT', dirname(dirname(dirname(__FILE__)))); 
} 
/** 
* The actual directory name for the "app". 
* 
*/ 

if (!defined('APP_DIR')) { 
    define('APP_DIR','app'); 
    //define('APP_DIR', basename(dirname(dirname(__FILE__)))); 
} 
/** 
* The absolute path to the "cake" directory, WITHOUT a trailing DS. 
* 
*/ 

if (!defined('CAKE_CORE_INCLUDE_PATH')) { 
    //define('CAKE_CORE_INCLUDE_PATH', ROOT); 
    define('CAKE_CORE_INCLUDE_PATH', DS.'home'.DS.'aquinto1'); 
} 


<script type="text/javascript"> 
    //var j=jQuery.noConflict(); 
    $(document).ready(function(){ 
     $("#MerryParentEmail").change(function(){ 
     //txt=$("#MerryParentEmail").val(); 
     email_id=$("#MerryParentEmail").serialize(); 
     $.post("/students/get_parent_info",email_id,function(result_str){ 
     result_array=result_str.split('*****'); 
      $("#MerryParentInitial").val(result_array[0]); 
      $("#MerryParentName").val(result_array[1]); 
      $("#MerryParentLandline").val(result_array[2]); 
      $("#MerryParentMobile").val(result_array[3]); 
      $("#MerryParentAddress").val(result_array[4]); 
      $("#MerryParentStateId").val(result_array[5]); 
      state=result_array[5]; 
      txt_str="state_id="+state; 
      $.get("/students/getcities",txt_str,function(result){ 
      $("#MerryParentCityId").html(result).show(); 
      $("#MerryParentCityId").val(result_array[6]); 
      }); 
      $("#MerryParentPostalCode").val(result_array[7]); 
     }); 
     }); 

     $("#MerryParentStateId").change(function(){ 
     state=$(this).val(); 
     txt_str="state_id="+state; 
     $.get("/students/getcities",txt_str,function(result){ 
      $("#MerryParentCityId").html(result).show(); 
     }); 
     }); 
}); 
</script> 

students_controller的get_parent_info FUNC和getcities FUNC:

function get_parent_info(){ 
//$this->layout=false; 
if (!empty($this->data)){ 

    $merryparent_info=$this->Student->MerryParent->getMerryParents($this->data['MerryParent']['email']); 
    print_r($merryparent_info); 
    echo $merryparent_info['MerryParent']['initial'].'*****'; 
    echo $merryparent_info['MerryParent']['name'].'*****'; 
    echo $merryparent_info['MerryParent']['landline'].'*****'; 
    echo $merryparent_info['MerryParent']['mobile'].'*****'; 
    echo $merryparent_info['MerryParent']['address'].'*****'; 
    echo $merryparent_info['MerryParent']['state_id'].'*****'; 
    echo $merryparent_info['MerryParent']['city_id'].'*****'; 
    echo $merryparent_info['MerryParent']['postal_code'].'*****'; 
    } 
} 

function getcities(){ 
    $this->data['MerryParent']['state_id']=$_GET['state_id']; 
    if (!empty($this->data['MerryParent']['state_id'])){ 
     $cities = $this->Student->MerryParent->City->getCities($this->data['MerryParent']['state_id']); 
    //print_r($cities); 
    foreach ($cities as $k=>$v){ 
      echo '<option value="'.$k.'">'.$v.'</option>'; 
    } 

     /* foreach($cities as $optionValue){ 
      echo '<option>' . $optionValue . '</option>'; 
     }*/ 
    }else{ 
     $this->Session->setFlash('You didn\'t select a state!'); 
    } 

} 

回答

2

默認情況下,您可以'不同域之間進行XHR請求。

您需要動態生成腳本標記並使用JSONP。

下面是似乎涵蓋如何做到這一點的文章:http://cjihrig.com/blog/remote-ajax-calls-using-jsonp/

此外,需要注意的是這可能會導致安全問題是非常重要的。

+0

好的,我讓阿賈克斯在我的域名獲取和發佈請求。它不是跨域。/students/get_parent_info和/ students/get_cities都在我的域中。 – vaanipala 2012-04-19 00:49:21

+0

正如我在我的問題中提到的,我的域名是http://www.merryflowers.com。 get_parent_info和getcities函數通過模型從數據庫表中檢索數據。 – vaanipala 2012-04-19 09:07:16

0

我相信這裏的問題與你的localhost文件結構和根路徑位置以及遠程服務器文件結構和根路徑位置之間的差異有很大關係。首先,你的url,即使是AJAX調用,也不應該從根目錄開始。您的公共文件夾(www,public_html)應該將流量重定向到您的框架中,以便在PHP以某種方式失敗的情況下維護適合搜索引擎優化的網址和更安全的網站。這就是說,你的AJAX網址應該仍然是www.merryflowers.com/students/get_parent_info,其中學生是你的控制器,get_parent_info是你學生控制器中的功能。如果它在本地工作,那麼它應該遠程工作,但它需要正確的途徑來獲得它需要去的地方。我猜你的本地設置包含一個htdocs文件夾,而你的遠程服務器,如你所述,包括www和public_html文件夾(可能是simlinked)。首先檢查路徑參考差異的代碼 - 本地遠程存在的路徑,文件夾結構的差異等...然後通過您的配置,引導程序和任何其他定義路徑並相應地修改路徑的文件。我還會用MVC,PHP,Apache(如果您使用Apache或ISAPI等),htaccess和路徑來重申您的問題。

+0

好吧,我會嘗試你的建議,並回到這裏。謝謝。 – vaanipala 2012-04-20 00:25:26

+0

我已經用index.php和test.php更新了我的問題,其中定義了目錄結構。請看一下。 – vaanipala 2012-04-20 01:24:22

0

好的,問題出現在MerryParent Model中的代碼中。我的jQuery代碼沒有錯。

在MerryParent模型,

function getMerryParents($field_value){   
if (is_int($field_value))   
    $conditions=array('merryParent.id'=>$field_value);   
else   
    $conditions=array('merryParent.email'=>$field_value);   

//debug($conditions);   

$merryparent_info=$this->find('first',array(   
          'conditions'=>$conditions,   
          'recursive'=>-1 //fetches merry_parents table data only not the associated data   
          ));   
     debug($merryparent_info);   
return $merryparent_info;   
}   

我改變merryParent.id到MerryParent.id和merryParent.email到MerryParent.email,現在可在遠程服務器上。 :)

0

這個工作對我..我面臨同樣的問題,但把它通過以下兩個步驟

1)解決。而引用jquery和其他js文件我改爲IP地址,而不是相對路徑

2)在所有http get請求中,我用正確的IP地址替換了localhost。

謝謝Lazerblade。你幫了我很多。

Mukharjee

相關問題