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

时间:2015-12-17 18:00:24

标签: javascript php last.fm

我正在使用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在艺术家的名字中有一个空格,例如'Mobb Deep'时,该函数就不会被调用,如果艺术家的名字是'Adele',则该函数被调用。如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

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

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

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

编辑创建<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()引号。