传递href时,javascript eval不起作用

时间:2013-06-18 20:14:55

标签: javascript javascript-events

我第一次不清楚 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);

1 个答案:

答案 0 :(得分:0)

您可能会因简化代码而导致一些小错误。

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

在这一行中有两个未定义的变量search_itemtextarea。在小提琴手中,我修改了这一行以从fiddler获得一个结果,该结果等于来自你的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']);

你的例子一起工作。另请参阅此fiddler并进行所有更改。