0

我第一次不清楚ajax请求。

当我单击链接时,应该会出现另一个链接

这就是我想要做的(简化),但问题是当它出现里面的 JS 不想运行时

HTML:

<html><body>
<div id="result">&nbsp;</div>
<a href="javascript:suggest('result'); return true;">click to see the link</a>
</body></html>

JavaScript

function evalResponse (request)
{
    try
    {
        //var responseText = request.responseText.replace (/\n/g, " ");
        var responseText = request.responseText;
        return eval('(' + responseText + ')');
    }
    catch (e)
    {
        alert ("line: " + e.lineNumber + "\nmessage: " + e.message + "\nName: " + e.name);
    }
}


function suggest(target_div)
{

    var opt = {
        // Use POST
method: 'post',
        // Send this lovely data
postBody: 'Action=Edit&search_word=' + search_item + '&target=' + textarea,
        // Handle successful response
onSuccess: function(t) {

            var json = evalResponse (t);

            data = json[1];

            if (errors.errorText == undefined)
            {
                           document.getElementById('target_div').update(data['link']);
            }


        },
        // Handle 404
on404: function(t) {
            alert('Error 404: location "' + t.statusText + '" was not found.');
        },
        // Handle other errors
onFailure: function(t) {
            alert('Error ' + t.status + ' -- ' + t.statusText);
        }
    }

    new Ajax.Request('handler.php', opt);
}

PHP处理程序:

    $jsonArray = array();
    $jsonArray[1]["link"] = '<a href="javascript:alert(\'fdg\');" onClick="return true;">link</a>';

$json = new Services_JSON();
echo $json->encode($jsonArray);
4

1 回答 1

0

您有一些小错误可能是由于简化代码引起的。

postBody: 'Action=Edit&search_word=' + search_item + '&target=' + textarea

在这一行中有两个未定义的变量search_itemtextarea. 在提琴手中,我修改了这一行以获得来自提琴手的结果,该结果等于来自您的 php 脚本的结果:

{"1":{"link":"<a href=\"javascript:alert('fdg');\" onClick=\"return true;\">link<\/a>"}}

但是我不建议使用 eval!JSON.decode(response)解析来自服务器的结果并阻止执行例如来自服务器的警报是危险的更好的用途。

if (errors.errorText == undefined)

您还访问了不存在的对象,而且您的检查也是错误的。errors在这种情况下未定义,因此您也需要检查它。正确的比较看起来像typeof运算符:

if (typeof(errors) === "undefined" || typeof(errors.errorText) === "undefined")

最后,您还有另一个小错误,您在此行中添加了太多 qoutes:

document.getElementById('target_div').update(data['link']);

我猜你想使用这条线:

document.getElementById(target_div).update(data['link']);

您的示例将一起工作。另请参阅this fiddler with all changes。

于 2013-06-18T20:22:15.023 回答