0

以下 jquery 代码在本地服务器上运行良好,但在远程服务器上不起作用。仅供参考,远程服务器正在识别 jquery。我通过我的 Stackoverflow Q 解决了这个问题

请在Merry Flowers 入场页面查看问题页面。当我输入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 。我在远程服务器上的根目录是 /home/aquinto1。我很久以前就对这些文件进行了更改。我现在没有在这里修改任何东西。

以下是我的代码:

索引.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');

}

测试.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>

student_controller 的 get_parent_info 函数和 getcities 函数:

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

4 回答 4

2

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

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

这是一篇似乎涵盖如何做到这一点的文章:http: //cjihrig.com/blog/remote-ajax-calls-using-jsonp/

此外,重要的是要注意这可能会导致安全问题。

于 2012-04-18T17:23:38.170 回答
0

我相信这里的问题与您的本地主机文件结构和根路径位置与您的远程服务器文件结构和根路径位置之间的差异有很大关系。首先,您的 url,即使是 AJAX 调用,也不应该从根目录路径。您的公共文件夹(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 和路径重新标记您的问题。

于 2012-04-19T12:09:51.170 回答
0

这对我有用..我面临同样的问题,但通过以下两个步骤解决

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

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

感谢激光刀。你帮了我很多。

穆哈吉

于 2013-04-02T07:30:13.630 回答
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 ,它现在可以在远程服务器上运行。:)

于 2012-04-25T17:30:58.583 回答