如果调用函数时提供的参数包含 space,则不会调用函数

If the parameter supplied while calling a function contains space, function is not called

我正在使用 last.fm api。我有一个 JavaScript AJAX 函数是这样的,

function showart(art) {
    if (art=="") {
    document.getElementById("info").innerHTML="";
    return;
    } 
    if (window.XMLHttpRequest) {
        xmlhttp=new XMLHttpRequest();
    } else {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("info").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","5.php?a="+art,true);
    xmlhttp.send();
}

这是我调用它的 PHP 代码。

for($i=1;$i<=10;$i++) {
    echo '<table><td width="36px">';
    echo '<img src="'.$info->topartists->artist[$i-1]->image.'"></td>';
    echo '<td><a class="artist" href=# onclick=showart(\''.$info->topartists->artist[$i-1]->name.'\')>'.$info->topartists->artist[$i-1]->name.'</a></td></table>';
}

只要 $info->topartists->artist[$i-1]->name 在艺术家的名字中包含 space,例如 'Mobb Deep',则不会调用该函数,例如,如果艺术家的名字是 'Adele',正在调用该函数。如何解决这个问题?

您必须对参数值进行编码:

xmlhttp.open("GET","5.php?a=" + encodeURIComponent(art), true);

这将正确编码 space,服务器将对其进行解码。

edit 创建 <a> 标签的代码没有将 "onclick" 属性值放在引号中,所以当 HTML 是解析的事件处理程序代码最终被破坏。你应该引用代码:

echo '<td><a class="artist" href=# onclick="showart(\''.$info->topartists->artist[$i-1]->name.'\')">'.$info->topartists->artist[$i-1]->name.'</a></td></table>';

请注意在 showart() 调用周围添加的 " 引号。