jQuery $ .post函数没有命中服务器?错误的错误响应

时间:2013-08-09 20:08:55

标签: jquery

我正在尝试访问具有内置Web服务器的控制处理器。根据编程到控制器中的特定值,我能够通过使用jQuery或js驻留在其内置服务器上的网站触发操作。我使用jQuery post命令时遇到了问题。当我使用goggle的REST插件时,一切正常,我成功得到了回复。有什么想法吗?

function GetVariableValuesByName(name) {
    $.post("http://10.10.254.11/RPC/", {
        method: "GetVariableValuesByName",
        param1: name,
        encoding: "2"
    }).done(function (data) {
        data = String(data);
        var info = data.responseText;
        alert(info);
    }).fail(function (data) {
        data = String(data);
        alert("error " + data)
    }).always(function (data) {
        data = String(data);
        alert("just in case " + data);
    });
}

最后一个函数示例的一些其他示例假设我已经创建了xmlhttp对象。

function GetVariableValuesByName(name) {

$.ajax({
type: "POST",
url: "http://10.10.254.11/RPC/",
data: { method: "GetVariableValueByName", param1: "VOL_BAR", encoding: "2" }
}).done(function( msg ) {
    alert( "Data Saved: " + msg );
}).fail(function(msg) {
    alert("error " + msg)
});
}

function GetVariableValuesByName(name) {

xmlhttp.open("POST","http://10.10.254.11/RPC/",false);
var theString = "method=GetVariableValueByName&param1=" + name;
xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(theString);    
var wacivar = xmlhttp.responseText; 
wacivar = String(wacivar);
wacivar = wacivar.substr(19);

alert(wacivar);
}

1 个答案:

答案 0 :(得分:0)

您正在使用同源策略,这意味着您可以在向另一个域发出AJAX请求时,无法读取响应(这就是回调未触发的原因)。这里的解决方案是使用CORS(在服务器端向HTTP响应添加额外标头)或JSONP(使用JSONP回调进行自定义响应)。我建议你使用CORS,因为它提供了更好的错误处理,而JSONP更像是一个黑客攻击。

如果您想使用CORS,请将维基百科文章中描述的标题添加到必须跨域的回复中。

您要求提供解决方案的示例,但必须在服务器端为JSONP和CORS实施解决方案。