0

次の jquery コードは、ローカル サーバーでは正常に動作しますが、リモート サーバーでは動作しません。参考までに、リモート サーバーは jquery を認識しています。私はそれをMy Stackoverflow Qで動作させました

Merry Flowers 入会ページ で問題のページを確認してください。電子メール ID (保護者情報) としてバナナ8@gmail.com を入力してタブ キーを押すと、後続のすべてのフォーム要素が自動的に入力されます。しかし、ここではそうしていません。

以下は、/students/get_parent_info の chrome の開発者ツールからのネットワーク ヘッダーです。

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 です。私はずっと前にこれらのファイルに変更を加えました。ここでは何も変更していません。

以下は私のコードです:

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 関数と 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

ここでの問題は、ローカルホストのファイル構造とルートパスの場所、およびリモートサーバーのファイル構造とルートパスの場所の違いに大きく関係していると思います。まず、AJAX呼び出しの場合でも、URLをルートからパスしないでください。パブリックフォルダー(www、public_html)は、トラフィックをフレームワークにリダイレクトする必要があるため、PHPが何らかの理由で失敗した場合に備えて、SEOに適したURLとより安全なサイトを維持します。そうは言っても、AJAXのURLはwww.merryflowers.com/students/get_parent_infoである必要があります。ここで、studentsはコントローラーであり、get_parent_infoはstudentsコントローラーの関数です。ローカルで機能している場合は、リモートで機能するはずですが、必要な場所に到達するには正しい経路が必要です。ローカルセットアップにはhtdocsフォルダーが含まれていると思いますが、リモートサーバーは、あなたが述べたように、wwwおよびpublic_htmlフォルダー(おそらくsimlinked)が含まれます。経路参照の違い(リモートに存在しないローカルの経路、フォルダー構造の違いなど)についてコードを確認することから始めます。次に、構成、ブートストラップ、および経路を定義するその他のファイルを調べ、それに応じて変更します。また、MVC、PHP、Apache(Apache、ISAPIなどを使用している場合)、htaccess、pathを使用して質問のタグを付け直します。

于 2012-04-19T12:09:51.170 に答える
0

OK、問題は 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 に答える