简体   繁体   English

Ajax调用未返回期望值

[英]Ajax call not returning expected value

Stuck on why this isn't working, anyone got any ideas? 坚持为什么这不起作用,有人有任何想法吗? It should update the button and i think it does, just displays the else at the end all the time 它应该更新按钮,我认为确实如此,只是一直在最后显示其他

    function friendToggle(type,user,elem){
    var conf = confirm("Press Ok to confirm the '" +type+ "' action for user " + user);
    if(conf != true){
        return false;
    }

    O(elem).innerHTML = 'please wait...';

    params = user
    request = new ajaxRequest()
    request.open("POST", "friendSystem.php", true)
    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
    request.setRequestHeader("Content-length", params.length)
    request.setRequestHeader("Connection", "close")

    request.onreadystatechange = function(){
        if(this.readyState == 4){
            if(this.responseText == "friend_request_sent"){
                O(elem).innerHTML = 'OK Friend Request Sent';
            }else if(this.responseText == "unfriend_ok"){
                O(elem).innerHTML = '<button onclick="friendToggle(\'friend\',\'echo $view;\',\'friendBtn\')">Request As Friend</button>';
            }else {
                alert(request.responseText);
                O(elem).innerHTML = 'Try again later';
            }
        }   
    }   
request.send("type="+type+"&user="+user);

} }

This is the code it calls: 这是它调用的代码:

if($_POST['type'] == "friend")
{
    $friendCount = mysqli_fetch_row(querySQL("SELECT COUNT(*) FROM friends WHERE user='$user' AND accepted='1' OR friend='$user' AND accepted='1'"));

    $blockCount1 = mysqli_fetch_row(querySQL("SELECT COUNT(*) FROM blockedusers WHERE blocker='$user' AND blockee='$view' LIMIT 1"));

    $blockCount2 = mysqli_fetch_row(querySQL("SELECT COUNT(*) FROM blockedusers WHERE blocker='$view' AND blockee='$user' LIMIT 1"));

    $rowCount1 = mysqli_fetch_row(querySQL("SELECT COUNT(*) FROM friends WHERE user='$view' AND friend='$user' AND accepted='1' LIMIT 1"));

    $rowCount2 = mysqli_fetch_row(querySQL("SELECT COUNT(*) FROM friends WHERE user='$user' AND friend='$view' AND accepted='1' LIMIT 1"));

    $rowCount3 = mysqli_fetch_row(querySQL("SELECT COUNT(*) FROM friends WHERE user='$view' AND friend='$user' AND accepted='0' LIMIT 1"));

    $rowCount4 = mysqli_fetch_row(querySQL("SELECT COUNT(*) FROM friends WHERE user='$user' AND friend='$view' AND accepted='0' LIMIT 1"));

    if($friendCount[0] > 99){
        echo"$user currently has the maximum number of friends and cannot accept any more";
    }elseif($blockCount1[0] > 0){
        echo "$user has you blocked, we cannot proceed.";
    }elseif($blockCount2[0] > 0){
        echo"You must first unblock $user in order to friend them.";
    }elseif($rowCount1[0] >0 || $rowCount2[0] > 0){
        echo"You are already friends with $user.";
    }elseif($rowCount3[0] >0){
        echo"You have a pending friend request already sent to $user.";
    }elseif($rowCount4[0] > 0){
        echo"$user has requested to friend with you first. Check your friend requests";
    }else{
        querySQL("INSERT INTO friends VALUES('$user','$view','0')");
        echo"friend_request_sent";
    }

}       

its meant to echo the correct error message, but doesn't. 它的意思是回显正确的错误消息,但不是。 Also will never send the friend request sent message 也永远不会发送好友请求发送的消息

Your Content-length isn't right. 您的内容长度不正确。 It's set to the length of user but you send more than that in the POST data. 它设置为user的长度,但是您发送的内容比POST数据中的要多。 It seems the web server is cutting your data up to the wrong length, then can't parse the malformed string. 似乎Web服务器正在将您的数据切成错误的长度,因此无法解析格式错误的字符串。

Make your POST data into a variable, so you can get the length without duplicating it: 将您的POST数据变成一个变量,这样就可以得到长度而无需重复它:

var data = "type="+encodeURIComponent(type)+"&user="+encodeURIComponent(user);
request.setRequestHeader("Content-length", data.length);

Then when you call send: 然后,当您致电发送时:

request.send(data);

Side note: added encodeURIComponent to properly encode the values. 旁注:添加了encodeURIComponent以正确编码值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM