У меня есть следующий код, который является основной частью моего небольшого приложения AJAX. Я не получаю ошибок, просто ничего не происходит. Я предполагаю, что есть более эффективный способ делать то, что я пытаюсь сделать.
Вот код:
var xmlHttp
var layername
function update(layer, part, pk, query)
{
if (part= = "1")
{
$url "get_auction.php?cmd=GetAuctionData&pk = "+pk+"&sid = "+Math.random()
}
else if (part= = "2")
{
var url "get_records.php?cmd=GetRecordSet&query = "+query+"&sid = "+Math.random()
}
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert("Your browser is not supported?")
}
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState==4 || xmlHttp.readyState= = "complete") {
document.getElementById(layer).innerHTML=xmlHttp.responseText
} else if (xmlHttp.readyState==1 || xmlHttp.readyState= = "loading") {
document.getElementById(layer).innerHTML = "loading"
}
};
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
xmlHttp=new XMLHttpRequest();
}catch (e)
{
try
{
xmlHttp =new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
return xmlHttp;
}
function makewindows(){
child1 = window.open ("about:blank");
child1.document.write(json_encode(<?php echo $row2["ARTICLE_DESC"]; ?>));
child1.document.close();
}
и пример того, как я вызываю функцию из php
onclick = "update(\'Layer3\',\'2\','.$pk.'\',\'0\',)">'
pk или запрос никогда не будут переданы одновременно, будет передан только один из них.
edit: Мне также интересно, имеет ли смысл для функции makewindows принимать параметр или оставаться как есть. Есть ли преимущества и недостатки у каждого подхода?
Я не понимаю твой вопрос. Вы хотите, чтобы мы проверили вашу логику или ваш код?
Сначала код, так как он, кажется, не вызывает интереса, и я не уверен, можно ли иметь два параметра, если используется только один ..., даже если мой код работает, я хотел бы знать, лучший ли он способ делать то, что я хочу делать.






Я бы проверил HTML, который генерирует PHP. Предполагая, что $ pk - это строка, похоже, что вам не хватает вступительной цитаты. Попробуй это:
onclick = "update(\'Layer3\',\'2\',\''.$pk.'\',\'0\',)">
Но верна ли моя логика? Если функция принимает два параметра, если используется только один из них?
json_encode - это функция PHP, и поэтому вам нужно изменить эту конкретную строку следующим образом:
child1.document.write(<?php echo json_encode($row2["ARTICLE_DESC"]); ?>);
Это не является причиной этой проблемы, однако проблема в том, что get_records никогда не вызывается в функции обновления, а не в makewindows.
Похоже, у вас могут быть ошибки javascript:
if (part= = "1")
{
$url "get_auction.php?cmd=GetAuctionData&pk = "+pk+"&sid = "+Math.random()
}
else if (part= = "2")
{
var url "get_records.php?cmd=GetRecordSet&query = "+query+"&sid = "+Math.random()
}
Используйте Firefox и откройте консоль javascript, чтобы получить ошибки javascript, затем попробуйте исправить строки, на которые он жалуется.
Javascript перестанет работать, как только обнаружит ошибку.
Кроме того, проверьте Firebug, если вы еще этого не сделали. Отличный инструмент!
Я проверил JSLint здесь jslint.com, который выдает в основном пропущенные точки с запятой и ошибки переноса строк. При просмотре страницы ошибок нет. Можно ли использовать мою логику таким образом, если когда-либо использовался только один из p или query?
Что ж, ваш URL-адрес должен быть объявлен перед оператором if, чтобы при его использовании в javascript он находил то или другое. Также один - это Perl $ url, а другой не имеет символа '=', например url = "get_auction.php? Blah";
что со всеми "\"? Это escape-символы в javascript.