【问题标题】:"Object Expected" error while capturing the page load event捕获页面加载事件时出现“预期对象”错误
【发布时间】:2010-01-16 06:34:39
【问题描述】:

标签内的以下代码给出错误:“Object Expected”。

    <!-- JQuery/AJAX-->
    <script type="text/javascript">
        try {
            $(document).ready(function(){
                $("p").load(function(){
                    MakeRequest('divElectionCategory','ulElectionCategory','SELECT * FROM electioncategorymaster', 'UnOrderedList');
                });
            });
        }
        catch(e)
        {
            alert(e.message);
        }
    </script>

MakeRequest 函数位于一个单独的 .js 文件中,我在上面给出的代码之前包含了该文件。

它指的是哪个对象?

编辑: MakeRequest 函数

function MakeRequest(DivName, ControlName, SqlQuery, ControlType)
{
  var xmlHttp = getXMLHttp();
  var strUrl = "";

  if (ControlType = 'DropDown')
      strUrl = "../phplibraries/filldropdown.php?DivName=" + DivName + "&DropDownControlName=" + ControlName + "&SqlQuery=" + SqlQuery;
  else
      strUrl = "../phplibraries/createelectioncategorymenu.php?DivName=" + DivName + "&ulName=" + ControlName + "&SqlQuery=" + SqlQuery;

  alert(strUrl);
  try 
  {
    xmlHttp.onreadystatechange = function()
    {
        if (xmlHttp.readyState == 4) 
        {
            HandleResponse(xmlHttp.responseText, DivName);
        }
    }
            xmlHttp.open("GET", strUrl, true);
            xmlHttp.send(null);
    }
    catch(err)
    {
        alert(err);
    }
}

我知道上面有一个很大的安全问题,但现在请忽略它。

【问题讨论】:

  • HandleResponse 在做什么?为什么不按预期使用$.load

标签: javascript jquery html ajax


【解决方案1】:

你不能那样打电话给load()

load 的第一个参数采用 URL 而不是函数。也许你的意思是:

$("p").load( MakeRequest('divElectionCategory','ulElectionCategory','SELECT * FROM electioncategorymaster', 'UnOrderedList') );

假设 MakeRequest 返回一个格式化的 URL。

编辑

.load() 当用于 DOM 元素并且第一个参数是一个函数时,jQuery 假定您正在附加一个事件处理程序。但是,p 没有加载事件。如果你想等待一切加载,试试这个(它不必在 DOM 中准备好):

$(window).load( function(){
   MakeRequest('divElectionCategory','ulElectionCategory','SELECT * FROM electioncategorymaster', 'UnOrderedList')
});

MakeRequest 重写

function MakeRequest(DivName, ControlName, SqlQuery, ControlType)
{
  var strUrl = "", params = {};

  if (ControlType = 'DropDown'){
    strUrl = "../phplibraries/filldropdown.php"; 
    params = {
      DivName: DivName,
      DropDownControlName: ControlName,
      SqlQuery: SqlQuery
    }
  } else {
    strUrl = "../phplibraries/createelectioncategorymenu.php";  
    params = {
      DivName: DivName,
      ulName: ControlName,
      SqlQuery: SqlQuery
    }
  }


  alert(strUrl);
  $.get(strUrl, params, function(data){
    HandleResponse(data, DivName);
  });
}

【讨论】:

  • 哦,道格,是你。是的,它有效,但包含 MakeRequest 函数的 .js 文件在 MakeRequest 中也包含一个 alert()。它不显示。我猜它没有达到 MakeRequest。
  • 你能发布 MakeRequest 的样子吗?只是为了确定您是否认为loadp 元素上的事件?还是您尝试发出 AJAX 请求?
  • RPK,为什么不使用 jQuery 的 AJAX 方法?
  • @Doug:我以前也这样做过。
  • 我使用 jQuery AJAX 方法重写了 MakeRequest 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多