Форма Javascript и Ajax-запрос к PHP - PullRequest
1 голос
/ 31 марта 2011

Почему это не работает? Когда код Ajax НЕ обернут в function xmlhttpGet(), он работает: PHP возвращает вызванную страницу и вставляет ее в DIV. В этом коде я обернул код в функцию xmlhttGet () и ничего не происходит. Запрашиваемая страница не загружается в DIV.

<html><head><title>AJAX GET </title>


</head><body><center />
<h1>Loading a web page into a DIV</h1>
<FORM id="form" method="post" action="">

<b> Enter argument: </b>
<input size="40" name="q" id="q" value="">
<INPUT TYPE="submit" id="submit" VALUE="Submit" onClick="xmlhttpGet(this.form)">
<INPUT TYPE="reset" VALUE="Reset">
</FORM>

<div id='info'>This sentence will be replaced</div>

<script>

function xmlhttpGet(form)
{

    nocache = "&nocache=" + Math.random() * 1000000
    request = new ajaxRequest()

    var $q = form.q.value

    request.open("GET", "urlget.php?url=amazon.com/gp/aw" + nocache, true)

    request.onreadystatechange = function()
    {
        if (this.readyState == 4)
        {
            if (this.status == 200)
            {
                if (this.responseText != null)
                {
                    document.getElementById('info').innerHTML =
                        this.responseText
                }
                else alert("Ajax error: No data received")
            }
            else alert( "Ajax error: " + this.statusText)
        }
    }

}// END xmlhttpGet

request.send(null) ;

function ajaxRequest()
{
    try
    {
        var request = new XMLHttpRequest()
    }
    catch(e1)
    {
        try
        {
            request = new ActiveXObject("Msxml2.XMLHTTP")
        }
        catch(e2)
        {
            try
            {
                request = new ActiveXObject("Microsoft.XMLHTTP")
            }
            catch(e3)
            {
                request = false
            }
        }
    }
    return request
}// ajaxRequest


</script></body></html>

[EDIT]

OnClick срабатывает нормально. Я подтвердил, вставив оповещения в функции.

[EDIT2]

Полагаю, будет полезно, если я покажу бит PHP *

<?php // urlget.php

if (isset($_GET['url'])) {
    echo file_get_contents("http://".sanitizeString($_GET['url']));
}
else {
        echo "problem!" ; // [edited line]
    }

function sanitizeString($var) {
    $var = strip_tags($var);
    $var = htmlentities($var);
    return stripslashes($var);
}
?>

Ответы [ 3 ]

0 голосов
/ 31 марта 2011

Ваша xmlhttpget функция должна начинаться как:

function xmlhttpGet(form)
{

... поскольку вы ссылаетесь на переменную form в функции (например, var $q = form.q.value), но никогда не назначаете еезначение (таким образом, оно создается / извлекается из глобальной области видимости).

Область действия this в вашей функции для onreadystatechange будет сильно различаться в зависимости от браузера и от того, как он называется - не очень хорошее решение для проектирования, попробуйтезаменив this на request в функции.

0 голосов
/ 31 марта 2011

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

Как только вы обернетесь в функцию, она не будет выполняться, пока функция не будет вызвана явно.

Если вы хотите, чтобы скрипт запускался автоматически, попробуйте изменить тег body на:

<body onload='xmlhttpGet();'>

Если вы хотите запустить функцию при взаимодействии с пользователем, используйте одно из многих событий , таких как onclick или onmouseover или onmousedown

0 голосов
/ 31 марта 2011

Вы должны вызвать xmlhttpGet() где-нибудь в вашем скрипте, чтобы заставить его 'запустить'

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