jquery post和get方法无法在远程服务器上运行

时间:2012-04-18 17:07:38

标签: jquery ajax cakephp path remote-server

以下jquery代码在本地服务器上正常工作但在远程服务器上不起作用。 FYI远程服务器正在识别jquery。我通过My Stackoverflow Q

完成了这项工作

请在Merry Flowers Admission Page结帐问题页面。当我输入banana8@gmail.com作为电子邮件ID(在父信息中)并按Tab键时,应自动填写所有后续表单元素。但它不是在这里做的。

以下是Chrome开发者工具/ students / 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]:banana8@gmail.com
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

网络响应和预览:

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

仅供参考,我已经确认现有banana8@gmail.com的记录。

在阅读lazerblade的回答后,我检查了www和public_html文件夹中的index.php和test.php。我在远程服务器上的root是/ 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!');
    }

}

4 个答案:

答案 0 :(得分:2)

默认情况下,您无法跨不同域发出XHR请求。

您需要动态生成脚本标记并使用JSONP。

这篇文章似乎涵盖了如何执行此操作:http://cjihrig.com/blog/remote-ajax-calls-using-jsonp/

此外,请务必注意,这可能会导致安全问题。

答案 1 :(得分:0)

我认为这里的问题与您的localhost文件结构和根路径位置以及远程服务器文件结构和根路径位置之间的差异有很大关系。首先,你的url,即使是AJAX调用,也不应该从root中进行修补。您的公用文件夹(www,public_html)应该将流量重定向到您的框架,因此您可以保持SEO友好的URL和更安全的站点,以防PHP以某种方式失败。话虽这么说,您的AJAX网址应该仍然是www.merryflowers.com/students/get_parent_info,其中学生是您的控制器,get_parent_info是您学生控制器中的功能。如果它在本地工作,那么它应该远程工作,但它需要正确的途径来获得它需要去的地方。我猜你的本地设置包括一个htdocs文件夹,而你的远程服务器,如你所说,包括www和public_html文件夹(可能是simlinked)。首先检查您的代码是否有路径参考差异 - 远程不存在的本地路径,文件夹结构的差异等等...然后浏览您的配置,引导程序以及定义路径的任何其他文件并相应地更改它们。我还会用MVC,PHP,Apache(如果你使用的是Apache,或者ISAPI,或其他什么),htaccess和path重新提出你的问题。

答案 2 :(得分:0)

好的,问题在于MerryParent模型中的代码。我的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,它现在可以在远程服务器上运行。 :)

答案 3 :(得分:0)

这对我有用..我遇到了同样的问题但是通过以下两个步骤解决了它

1)。在引用jquery和其他js文件时,我改为IP地址而不是相对路径

2)在所有的http get请求中,我用正确的IP地址替换了localhost。

谢谢Lazerblade。你帮助了我很多。

Mukharjee