cakephp jquery post和get方法在远程服务器上不起作用

2mbi3lxu  于 2022-11-11  发布在  PHP
关注(0)|答案(4)|浏览(164)

下面的jquery代码在本地服务器上运行良好,但在远程服务器上不起作用。仅供参考,远程服务器正在识别jquery。我通过My Stackoverflow Q获得了该代码
请在Merry Flowers Admission Page处检查问题页面。当我输入banana8@gmail.com作为电子邮件ID(在Parent Info中)并按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/aquinto 1。我很早以前就对这些文件进行了修改。现在我没有修改这里的任何内容。
下面是我的代码:
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>

学生控制器的获取家长信息函数和获取城市函数:

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!');
    }

}
uemypmqf

uemypmqf1#

默认情况下,您不能跨不同的域发出XHR请求。
您将需要动态生成脚本标记并使用JSONP。
这里有一篇文章似乎涵盖了如何做到这一点:http://cjihrig.com/blog/remote-ajax-calls-using-jsonp/
此外,请务必注意,这可能会导致安全问题。

aydmsdu9

aydmsdu92#

我相信这里的问题与本地主机文件结构和根路径位置与远程服务器文件结构和根路径位置之间的差异有很大关系。首先,您的url,即使是 AJAX 调用,也不应该是从根目录开始的路径。您的公共文件夹(www,public_html)应该将流量重定向到您框架中,这样您就可以维护对SEO友好的url和更安全的站点,也就是说,你的 AJAX 网址应该仍然是www.merryflowers.com/students/get_parent_info,其中students是你的控制器,get_parent_info是你在students控制器中的函数。如果它在本地工作,那么它应该在远程工作,但是它需要正确的路径来到达它需要去的地方。我猜您的本地设置包含一个htdocs文件夹,而您的远程服务器,正如您所说的,包括www和public_html文件夹首先检查代码中的路径引用差异--本地路径不存在于远程,文件夹结构中的差异,等等...然后检查配置、引导以及任何其他定义路径并相应地改变它们的文件。我还可以用MVC、PHP、Apache(如果您使用Apache或ISAPI等)、htaccess和path来重新标记您的问题。

l3zydbqr

l3zydbqr3#

好的,问题出在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;         
}

我将www.example.com更改为merryParent.idMerryParent.id,merryParent.emailMerryParent.email,现在它可以在远程服务器上工作了。:)

ttygqcqt

ttygqcqt4#

这对我很有效...我也遇到了同样的问题,但通过以下两个步骤解决了它
1).在引用jquery和其他js文件时,我更改为IP地址而不是相对路径
2)在所有的http get请求中,我用正确的IP地址替换了localhost。
谢谢激光刀,你帮了我很大的忙。
穆哈吉

相关问题