Функция AJAX (это) - PullRequest
       3

Функция AJAX (это)

0 голосов
/ 26 апреля 2011

Я не знаком с ajax, я нахожусь в процессе обучения, но, насколько я знаю, он использует javascript для доступа к DOM, поэтому мой вопрос, можно ли поместить аргумент внутри функции?

<script type="text/javascript">
function loadXMLDoc( * * this * * ) {
    var xmlhttp;
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET", ""
    test.php ? access = "**+this**", false);
    xmlhttp.send();
    document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
}
</script>

Разве это не должно работать?

Большое спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2011

Ты рядом. Похоже, вы используете пример из w3schools. Имейте в виду, что сайт не всегда самый надежный источник. См. http://w3fools.com/ для получения дополнительной информации.

Просмотрите их код снова, как он взят со страницы:

var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

Как видите, код "при успехе" находится в обработчике события onreadystatechange. В вашем примере кода есть три проблемы: одна с тем, как вы передаете переменную, две с тем, как вы используете this, и три с тем, что ваш обработчик ответа не будет работать должным образом.

var xmlhttp;
var var1 = 'testdata';
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    handleAjaxResponse(responseText);
  }
xmlhttp.open("GET","ajax_info.php?var1="+var1,true);
xmlhttp.send();

function handleAjaxResponse(resp) {
  document.getElementById("myDiv").innerHTML=resp;
}

В терминах this это относится к текущей сфере исполнения, совершенно другому предмету. Это не переменная, которую вы передадите через AJAX.

0 голосов
/ 26 апреля 2011

this в JS изменяется в зависимости от контекста, в котором вы работаете. В зависимости от того, как вы его называете, он будет меняться.

Прочтите эту статью для получения дополнительной информации: http://www.quirksmode.org/js/this.html

xmlhttp.open("GET",""test.php?access="**+this**",false);

Этот вызов не имеет особого смысла, поскольку this относится к объекту, но на самом деле вы пытаетесь объединить строки (добавив две строки вместе).

Если вам нужно вызвать переменную, используйте переменную вместо ключевого слова this.

function loadXMLDoc(accessVar) {
    ....
    xmlhttp.open("GET","test.php?access=" +accessVar ,false);
}

loadXMLDoc('accessIdentifier'); //passes the value 'accessIdentifier' to your method so it is passed along in the querystring. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...