te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Ajax error in module: the object's state must be OPENED - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Ajax error in module: the object's state must be OPENED - Stack Overflow

programmeradmin5浏览0评论

I am trying to add an ajax method to a module without using jQuery for the first time. I keep getting the following error on my method .jax() that says Uncaught InvalidStateError: Failed to execute 'send' on 'XMLHttpRequest': the object's state must be OPENED.

I am not sure how to resolve that. Here's my module and some simple HTML.

var Test = (function (el) {

  function InnerTest () {
    this.el = el;

    //Capital letters indicate a constant that should not change.
    this.PARA = 'p'

    this.init();       
  };

  InnerTest.prototype.init = function () {
    this
        .createChildren()
        .runIt()
        .jax();
  };

  InnerTest.prototype.createChildren = function () {
    this.para = this.el.querySelectorAll(this.PARA); 

    return this;
  };

  InnerTest.prototype.runIt = function () {
    var len = this.para.length;
    for (var i = 0, item; item = this.para[i]; i++) {
        //test if browser supports the classList method else use className to add class.
        if (item.classList) {
            item.classList.add(item.textContent)
        }
        else {
          item.className += ' ' + item.textContent
        }
        console.log( item );
        console.log( item.classList );
    }

    return this;
  };

  InnerTest.prototype.jax = function () {
    var self;
    var request = new XMLHttpRequest();
    request.open = ('GET', '', true);

    request.send();

    request.onload = function () {

        data = JSON.parse(this.reponse);
        console.log( data );
    };

    return this;
  };

  return InnerTest;

}( document.querySelector('.box') ));

(function () {
  new Test();
}());

Here's HTML:

<div class="box">
  <p>One</p>
  <p>Two</p>
  <p>Three</p>
</div>

I am trying to add an ajax method to a module without using jQuery for the first time. I keep getting the following error on my method .jax() that says Uncaught InvalidStateError: Failed to execute 'send' on 'XMLHttpRequest': the object's state must be OPENED.

I am not sure how to resolve that. Here's my module and some simple HTML.

var Test = (function (el) {

  function InnerTest () {
    this.el = el;

    //Capital letters indicate a constant that should not change.
    this.PARA = 'p'

    this.init();       
  };

  InnerTest.prototype.init = function () {
    this
        .createChildren()
        .runIt()
        .jax();
  };

  InnerTest.prototype.createChildren = function () {
    this.para = this.el.querySelectorAll(this.PARA); 

    return this;
  };

  InnerTest.prototype.runIt = function () {
    var len = this.para.length;
    for (var i = 0, item; item = this.para[i]; i++) {
        //test if browser supports the classList method else use className to add class.
        if (item.classList) {
            item.classList.add(item.textContent)
        }
        else {
          item.className += ' ' + item.textContent
        }
        console.log( item );
        console.log( item.classList );
    }

    return this;
  };

  InnerTest.prototype.jax = function () {
    var self;
    var request = new XMLHttpRequest();
    request.open = ('GET', 'https://api.github./users/xxxxxxxxx', true);

    request.send();

    request.onload = function () {

        data = JSON.parse(this.reponse);
        console.log( data );
    };

    return this;
  };

  return InnerTest;

}( document.querySelector('.box') ));

(function () {
  new Test();
}());

Here's HTML:

<div class="box">
  <p>One</p>
  <p>Two</p>
  <p>Three</p>
</div>
Share Improve this question edited Jan 31, 2014 at 15:28 Mdd asked Jan 31, 2014 at 14:57 MddMdd 4,42012 gold badges47 silver badges71 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 8

open is a method, not a property

request.open = ('GET', 'https://api.github./users/xxxxxxxxx', true);
            ^^^

should be

request.open('GET', 'https://api.github./users/xxxxxxxxx', true);
           ^^^

You missing some pieces. Look at this example. You should call methods. I just type without testing:

  InnerTest.prototype.jax = function () {
    var self;
    var request = new XMLHttpRequest();
    request.open('get', 'https://api.github./users/xxxxxxxxx', true);

    request.onreadystatechange = function() {
        if(xhr.readyState === 4) { // xhr.status === 200 not needed in your case
            data = JSON.parse(request.reponse);
            console.log( data );
        }
    };

    request.send();

    return this;
  };

Not sure if this is a typo in your code here or not, but:

var request = new XMLHttpRequest;

Should be:

var request = new XMLHttpRequest();
发布评论

评论列表(0)

  1. 暂无评论