проблема JavaScript - в том числе PHP - PullRequest
0 голосов
/ 16 декабря 2008

У меня есть код, вставленный ниже, какие серверы являются ядром небольшого ajax-приложения. Ранее это работало нормально, в makewindows фактически отображалось всплывающее окно, содержащее результат artcile_desc. Мне кажется, что до этой функции возникла ошибка, поскольку теперь выводится только фактический код php. Это не проблема с настройкой моего сервера, так как я являюсь администратором, и это не изменилось.

Я получаю следующие ошибки с Firebug, но я не уверен, что они означают.

unterminated string literal
onclick(click clientX=52, clientY=50)1GmRZ%2F...D9g%3D%3D (line 2)
[Break on this error] child1.document.write("<br />\n
1GmRZ%2F...D9g%3D%3D (line 2)
updateByQuery is not defined
onclick(click clientX=29, clientY=17)CLQWYjW1...WlQ%3D%3D (line 2)
[Break on this error] updateByQuery("Layer3", "Ed Hardy");

var xmlHttp
var layername
var url
function update(layer, url) {
    var xmlHttp=GetXmlHttpObject(); //you have this defined elsewhere

    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";
        }

       //etc
    }

    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
}


function updateByPk(layer, pk) {
   url = "get_auction.php?cmd=GetAuctionData&pk="+pk+"&sid="+Math.random();
   update(layer, url);
}


function updateByQuery(layer, query) {
   url = "get_records.php?cmd=GetRecordSet&query="+query+"&sid="+Math.random();
   update(layer, url);
}

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("<?php echo htmlspecialchars(json_encode($row2['ARTICLE_DESC']), ENT_QUOTES); ?>");
child1.document.close(); 
}

Что бы я ни попробовал, функция makewindows просто выводит код php в качестве источника HTML, а не результат кода php. Ранее это работало нормально, и я не уверен, что я изменил, чтобы привести к такому поведению.

Я вставил весь код сейчас. Ошибка генерируется ссылкой, которая вызывает updateByQuery, препятствуя правильному анализу makewindows .. Я думаю.

edit: php анализируется, когда я использую этот код:

function makewindows(){
child1 = window.open ("about:blank");
child1.document.write("<?php echo htmlspecialchars(json_encode($row2['ARTICLE_DESC']), ENT_QUOTES); ?>");
child1.document.close(); 
}

Но не код выше

результат php такой:

child1.document.write("<br />
58<b>Notice</b>: Undefined variable: row2 in <b>C:\Programme\EasyPHP 2.0b1\www\records4\fetchlayers.js</b> on line <b>57</b><br />
59null");

, который вызывает ошибку

Ответы [ 4 ]

2 голосов
/ 16 декабря 2008

Я не знаю, на что жалуется Firebug, но я сразу вижу что-то еще.

Вы не можете вывести PHP-код из Javascript и ожидать его запуска. Javascript выполняется в браузере, код PHP должен выполняться на сервере. По сути, вы предоставляете браузеру текстовый файл, похожий на код PHP, но браузер не знает, что с ним делать.

Если вы хотите выполнить код PHP, поместите его в файл на вашем веб-сервере. Укажите в окне браузера этот файл на сервере, и результат будет в окне.

1 голос
/ 16 декабря 2008

Во-первых, каждый раз, когда вы кодируете что-либо в определенную нотацию, вы должны преобразовать «специальные символы», прежде чем делать это, на случай, если это нарушит нотацию.

child1.document.write("<?php echo htmlspecialchars(json_encode($row2['ARTICLE_DESC']), ENT_QUOTES); ?>");

Следует читать:

child1.document.write("<?php echo json_encode(htmlspecialchars($row2['ARTICLE_DESC'], ENT_QUOTES)); ?>");

Я все еще немного сбит с толку, однако, почему вы даже вызываете json_encode, article desc должен быть строкой:

child1.document.write("<?php echo htmlspecialchars($row2['ARTICLE_DESC']), ENT_QUOTES); ?>");

Достаточно.

Однако это заполняется только при загрузке страницы, я думаю, это было ваше намерение. Если он не работает, просмотрите источник и убедитесь, что он указан в разметке источника.

0 голосов
/ 16 декабря 2008

Похоже, код PHP выдает ошибку. (На самом деле он даже указывает вам на fetchlayers.js в строке 57) Возможно, вам следует обернуть его блоком try / catch для обработки ошибок или хотя бы показать, какие ошибки происходят?

Также взгляните на FirePHP - я не очень много его использовал, но он кажется очень полезным и позволяет вам выводить отладочную информацию из вашего PHP-скрипта в окно консоли Firebug (это делается через пользовательский заголовки http и расширение Firefox).

0 голосов
/ 16 декабря 2008

Ммм, если JavaScript отображает код PHP, это означает, что сервер больше не знает, что что-то .php должно запускать интерпретатор PHP. Вы должны дважды проверить настройки. И убедитесь, что PHP не поврежден или что-то в этом роде.

Кроме того, ошибка Firebug, которую вы показываете, странная, показывает мусор. Возможно, вы установили сервер (или скрипт?) Для отправки Gzip-данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...