jquery ajax:远程服务器上的doctype语法错误和$未定义错误

时间:2012-04-12 23:56:59

标签: jquery ajax cakephp

我的jquery ajax代码在我的本地服务器上运行正常。但是,它无法在远程服务器justhost.com上运行。这让我疯了。 :(有人可以指出我出错的地方吗?

Merry Flowers是指向我网站的链接。当你使用firebug进入网站时,你将能够看到下面提到的错误。

当我尝试使用firebug进行调试时,我收到以下2个错误:

我在以下行收到语法错误:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

我尝试了不同的doctypes,但我仍然遇到了同样的错误。

我在下一行收到“$ is not defined error”:

$(document).ready(function(){

Google Chrome开发者工具的错误:

    Resource interpreted as Script but transferred with MIME type text/html: "http://www.merryflowers.com/js/jquery.js".
jquery.js:1Uncaught SyntaxError: Unexpected token <
home:8Uncaught ReferenceError: $ is not defined

当我点击Chrome开发者工具的网络标签时,

jquery.js's type is text/html not application/javascript. While the other javascript files are of type application/javascript.
按照Lazerblade的要求进行所有更正后,

cakephp的原始default.ctp代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 

Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<?php
 echo $this->Html->charset();
 ?>
<title>
    <?php  __('Merry Flowers Montessori'); ?>
    <?php echo $title_for_layout; ?>
</title>
<?php
    //echo $this->Html->meta('icon');
    echo $this->Html->css('cake.generic');  //link to cake.generic.css will be 

placed in $scripts_for_layout
        echo $this->Html->css('navbar.css'); 
        echo $this->Html->script('jquery.js'); //Include jquery library
/*      echo $this->Html->script('swfobject.js');
*/

    echo $this->Session->flash();
    echo $this->Session->flash('email');
    echo $scripts_for_layout;
?>
<script type="text/javascript">
   //var j=jQuery.noConflict();
  $(document).ready(function(){
      $("#MerryParentEmail").change(function(){
        //txt=$("#MerryParentEmail").val();
        email_id=$("#MerryParentEmail").serialize();
        //alert(txt);
        $.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>
</head>
<body>

<div id="container">
    <div id="header">
            <?php 
               echo $this->element('logo');
               echo $this->element('navbar');
              ?>
    </div> <!-- finish div header -->
    <div id="content">
        <div>
            <div id="content1">
            <?php echo $content_for_layout; ?>
            </div>
            <div id="content2">
                <?php 
                       echo $this->Html->link($this->Html->image("admission_open.gif",array("alt"=>"admissions")),
                                "/students/add",array('escape'=>false));  //if escape is false, admission_open.gif 

displays, otherwise only link <img src="/merry_flowers/img/admission_open.gif" alt="admissions"/> displays.
                          echo $this->Html->image("contact_us.gif", $options=array()); 
                    ?>  
                </div> 
            </div>
        </div>  <!--finish div content-->
        <div id="footer"> 
            &copy;  2011 Merry Flowers Montessori | Designed by VRI Web
        </div>
   </div><!--div container finish-->
</body>
</html>

以下是所有更正后的default.ctp视图源代码(cakephp中的布局页面)。

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 

Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   <title>
        Merry Flowers Montessori        Home    </title>
    <link rel="stylesheet" type="text/css" href="/css/cake.generic.css" /><link rel="stylesheet" type="text/css" href="/css/navbar.css" /><script type="text/javascript" src="/js/jquery.js"></script><script type="text/javascript" src="/js/swfobject.js"></script>   <script type="text/javascript">
       //var j=jQuery.noConflict();
      $(document).ready(function(){
          $("#MerryParentEmail").change(function(){

        //txt=$("#MerryParentEmail").val();
        email_id=$("#MerryParentEmail").serialize();
        //alert(txt);
        $.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>
</head>

<body>
<div id="container">

    <div id="header">
            <div>
<div style="float:left; width:98%; background-color:#ffffff;">
<img src="/img/logo.png" alt="" />  </div>
<div style="float:right; width:5%; top:100%; right:10%;">
<a href="/pages/home">Home</a>  </div>

    </div><div id="menu">

    <ul id="nav">

<!--        <li><a href="/pages/home">Home</a></li>
-->         <li><a href="#">Our Program</a><ul>

        <li><a href="/pages/preschool">Preschool</a></li>
        <li><a href="/pages/kindergarten">Kindergarten</a></li>
        <li><a href="/pages/summer_camp">Summer Camp</a></li>
        </ul>
        </li>
        <li><a href="#">About Us</a><ul>

        <li><a href="/pages/about_us">Merry Flowers</a></li>
        <li><a href="/pages/tour_our_school">Tour Our School</a></li>
        <li><a href="/pages/contact_us">Contact Us</a></li>
        </ul>
        </li>

        <li><a href="#">My Child</a><ul>
        <li><a href="/merry_parents/register">Report Card</a></li>

        </ul>
        </li>

        <li><a href="#">Events</a><ul>
        <li><a href="#">News &amp; Events</a>               <ul>
                <li><a href="/pages/sports_day">Sports Day</a></li>
                <li><a href="/pages/annual_day">Annual Day</a></li>

            </ul>
        </li>

        <li><a href="/pages/list_of_holidays">List of Holidays</a></li>
        </ul>
        </li>
        <li><a href="#">FAQ</a><ul>
        <li><a href="/pages/faq">FAQ</a></li>

        <li><a href="/feedbacks/add">Feedback</a></li>
        <li><a href="/forum/home">Discussion</a></li>
        </ul>
        </li>
        <li><a href="#">Admissions</a><ul>
        <li><a href="/students/add">Enroll Now</a></li>
        </ul>

        </li>
    </ul><!--finish ul nav-->
   </div> <!--finish div menu-->        </div> <!-- finish div header -->
    <div id="content">
        <div>
            <div id="content1">
            <script type="text/javascript">
//<![CDATA[
swfobject.embedSWF("/main_ani.swf", "content1", "530", "300", "9.0.0",
            "", {}, {wmode : "opaque"}, {});
//]]>
</script>               </div>

                <div id="content2">
                    <a href="/students/add"><img src="/img/admission_open.gif" alt="admissions" /></a><img src="/img/contact_us.gif" alt="" />  
                </div> 
            </div>

    </div>  <!--finish div content-->
    <div id="footer"> 
        &copy;  2011 Merry Flowers Montessori | Designed by VRI Web
    </div>


 </div><!--div container finish-->
</body>

</html>

顺便说一句,我正在使用带有cakephp的jquery。谢谢。

5 个答案:

答案 0 :(得分:1)

CakePHP有一个功能,它将很好地生成其URL。它非常易于使用 见HTML Helper URL

我认为你的jQuery问题与CakePHP无关。 我的猜测是你的jQuery文件链接无效或你的jQuery上下文被破坏。很难说。

编辑:看到你的页面后,我猜测问题是。

  • 您要在每个.ctp模板中添加完整的HTML文档。这只需要在default.ctp
  • 或者您在当前页面内使用Ajax再次加载完整页面。

答案 1 :(得分:1)

最可能的答案可能是您链接jquery文件的方式。

<script type="text/javascript" src="/js/jquery.js"></script>    

检查萤火虫&gt;脚本,看看jquery.js的结果是什么。如果我猜对了,jquery.js没有返回jquery代码,而是返回404或其他内容。

答案 2 :(得分:1)

再次检查。问题不在于jQuery文件本身,它与添加方式有关,可能是.htaccess文件存在冲突,或者路径设置错误。它正在尝试加载错误页面。查看Chrome开发者工具中的预览和响应,特别是加载jQuery.js时的响应。您在请求jQuery文件时加载了网站页面。我需要看到更多的实际代码,而不是视图源,以便找出确切的问题,但结果是jQuery没有加载......

编辑:检查你的jQuery文件是否确实在/ js /文件夹中,并且它的名称恰好是jquery.js,而不是jquery.latest.min.js或其他类似的东西。文件名区分大小写,因此如果它是jQuery.js(注意大写Q),则需要重命名或更改代码。同时打开jQuery文件并确保它不为空(通常“下载”jQuery需要在浏览器中以纯文本格式打开文件,复制全部文件,粘贴到文件中,并保存该文件)。

EDIT2:如果这是在本地但不是远程工作,有两个可能的原因。您要么丢失公用文件夹中的.htaccess文件中的重写条件,要么在您的某个配置文件中有/ localhost /,无论是apache httpd.config还是.htaccess文件,或者可能在config.php文件中(从公共文件夹中的index.php调用)。

Options -Indexes
RewriteEngine on
#
# Redirect all non-image and non-file requests to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

公用文件夹中的.htaccess示例,用于将路径不在公用文件夹中的所有请求重定向到索引文件中。

答案 3 :(得分:0)

您发送请求的方式是

$.post("../students/get_parent_info" ... );

这似乎更像是目录遍历而不是链接。即使它似乎在一个阶段工作,你应该使用它。您可能需要提供

之类的直接链接
$.post("http://domain.com/students/get_parent_info", ... );

答案 4 :(得分:0)

好了lazerblade的指导,我发现了问题,在public_html / merry_flowers / js和www / merry_flowers / js文件夹中没有jquery.js。现在将jquery.js添加到这些文件夹中后,我在jquery.js的网络响应(chrome开发人员工具的网络)中没有出现任何错误,jquery.js在网络中的类型为application / javascript。但是,我的jquery函数还没有工作。所以,我现在必须调查一下。

感谢你们所有人。你的帮助是无价的!