使用Ajax的可变目标文件

时间:2014-01-25 20:58:01

标签: javascript ajax

我想首先说我宁愿任何建议都不包括JQuery;我不喜欢JQuery如何成为JavaScript中的事实标准 所以这是我的问题:
我想将一个变量传递给一个函数,然后该函数将该变量用作.open()中文件的路径。到目前为止,这是我的代码:
被调用的函数示例:
ajaxPost('chatlog.txt',null);

被调用的函数:

function ajaxPost(targetPath,toSend){
    var getMessage;
    if (window.XMLHttpRequest){
        getMessage=new XMLHttpRequest();
    }
    else{
        getMessage=new ActiveXObject("Microsoft.XMLHTTP");
        alert("Stop using Internet Explorer.");
    }
    getMessage.open("POST",targetPath,true);
    getMessage.onreadystatechange=function(){
        if (getMessage.readyState==4 && getMessage.status==200){
            alert(getMessage.responseText);
        }
    };
    getMessage.send(toSend);
}

不幸的是,由于某些歌舞伎的原因,​​这不起作用。

3 个答案:

答案 0 :(得分:0)

添加

getMessage.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

发送之前。它告诉服务器如何处理POST内容。

答案 1 :(得分:0)

我在您的代码中看到了一些逻辑问题:

  • 使用POST方法的整个想法是将任何类型的数据发送到特定的后端,并根据该数据执行服务器端的东西,但是这里使用的是POST方法实际上是GET 'chatlog.txt'。因此,您必须先使用GET方法。

  • 但是如果你仍然坚持使用POST代替GET,你应该知道你可以使用POST方法而不是GET而且它会做同样的事情,但你会面对一些不可预见的问题。

您的实际问题:

我加载了您的实际页面并看到了您的问题,您的控制台出错:

  

无法加载资源:服务器响应状态为405(方法不允许)

正如我所说,这意味着你必须改变你的方法。我这样改了:

function ajaxPost(targetPath,toSend){
    var getMessage;
    if (window.XMLHttpRequest){
    getMessage=new XMLHttpRequest();
    }
    else{
        getMessage=new ActiveXObject("Microsoft.XMLHTTP");
        alert("Stop using Internet Explorer.");
    }
    getMessage.open("GET",targetPath,true);
    getMessage.onreadystatechange=function(){
    if (getMessage.readyState==4 && getMessage.status==200){
            alert(getMessage.responseText);
        }
    };
    getMessage.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    getMessage.send(toSend);
}

它返回了这样的数据:

<b>Peck:</b> Hello World!<br/>#
<b>World:</b> Hello Peck!<br/>#

答案 2 :(得分:-1)

使用XMLHttpRequest是一个非常糟糕的主意。如果您已经在使用JQuery,请尝试以下方法:

$.post( "test.php", {name: "John", time: "2pm"}).done(function( data )
{
  alert ("Succes! Data received: " + data);
});