我第一次不清楚 ajax
请求。
当我点击链接时,应该出现另一个
这是我正在尝试做的事情(简化) 但问题是当它里面的JS看起来不想运行时
HTML:
<html><body>
<div id="result"> </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);
答案 0 :(得分:0)
您可能会因简化代码而导致一些小错误。
postBody: 'Action=Edit&search_word=' + search_item + '&target=' + textarea
在这一行中有两个未定义的变量search_item
和textarea
。在小提琴手中,我修改了这一行以从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并进行所有更改。