我需要知道:
之间的确切区别<form method="POST" action="https://mywebsite/signon.php">
<input name="harv_acc" value="940322903" type="hidden" />
<input name="harv_eml" value="a@b.com" type="hidden" />
<input type="submit" value="SignOn" />
和
var url = "https://mywebsite/signon.php";
$.ajax({
url: url,
type: 'POST',
//dataType: 'html', -- this was something I tried later
//data: "harv_acc=" + accountnumber + "&harv_eml=" + email , this is also what I tried last but below is what I tried first
data: { harv_acc: account, harv_eml: email },
success: function (data) {
closePopup("div_PleaseWait");
alert(data);
//window.location = encodeURI('<%= Url.Action("DownloadDocument", "Documents") %>?DocumentID=' + documentID + '&DownloadType=' + downloadType + '&DownloadPath=' + data);
}
});
当我发布后者时,我得到200但没有回复。如果我提交第一个,我会得到正确的答复。
答案 0 :(得分:14)
来自评论:
我正在发布到另一个网站
啊哈!这是你的问题。出于安全原因,浏览器会将AJAX阻止到外部网站。抱歉,您不会通过XHR请求发出该请求。
如果其他网站希望您与他们沟通,他们可以通过JSON-P公开这部分网站,其工作方式如下:
<script src="http://othersite.com/signon.js?username=foo&password=bar&callback=myCallback">
添加到源代码中(是的,为此使用GET很麻烦,但JSON-P不能以任何其他方式工作),并创建一个名为myCallback
的函数处理响应数据。myCallback({success: false, errorMessage: "Incorrect password, try again!"})
myCallback
,一切都很开心。 JSON-P是一种功能强大的协议,但只有在远程站点同意的情况下才有效。不过,如果他们这样做,jQuery有一个很好的快捷方式:只需设置dataType: "jsonp"
,它将为你处理整个回调的事情。
但是如果你没有密切关注这个网站,那就不太可能发生这种情况,你可能只是不得不放弃这种跨网站互动。抱歉,这种跨域策略对于在线安全至关重要。 (我不希望其他网站代表我向bankofamerica.com
发出请求,kthx。)
答案 1 :(得分:1)
传递给complete
函数的第一个参数是jqXHR
对象,它是浏览器XMLHttpRequest
对象的包装器。处理响应的更方便的方法是使用done
方法:
var url = "https://mywebsite/signon.php";
$.ajax({
url: url,
type: 'POST',
dataType: 'html',
data: "harv_acc=" + accountnumber + "&harv_eml=" + email
}).done(function(data) {
closePopup("div_PleaseWait");
alert(data);
});
答案 2 :(得分:0)
尝试将热量数据作为键发送:值对象。这是jQuery docs
中的一个例子 $.ajax({
type: "POST",
url: "some.php",
data: { name: "John", location: "Boston" }
}).done(function( msg ) {
alert( "Data Saved: " + msg );
});
更新:正如用户Matchu指出的那样,这不是问题,因为无论如何数据都将转换为查询字符串,如jQuery文档中所述:
“数据选项可以包含形式为key1 = value1&amp; key2 = value2的查询字符串,或者形式为{key1:'value1',key2:'value2'}的地图。如果使用后一种形式,数据在发送之前使用jQuery.param()转换为查询字符串。“
所以是的,我的一些皮疹在那里回答。至少我学到了一些东西! ;)
答案 3 :(得分:0)
浏览器不支持跨域ajax请求。但还有另一种解决方法。
您可以使用JSONP进行跨域请求。它易于使用,允许您从支持回调的任何服务器/脚本请求任何内容(只要它是JSON格式)。 JSONP的好处在于它也适用于旧版浏览器。
唯一严重的限制似乎是它总是使用HTTP GET方法
你也可以用这个来检查。
答案 4 :(得分:-2)
使用POST方法时,在您的情况下,您应该将数据发布为JSON
var url = "https://mywebsite/signon.php";
$.ajax({
url: url,
type: 'POST',
dataType: 'html',
data: {
harv_acc : accountnumber,
harv_eml : email
},
success: function (data) {
closePopup("div_PleaseWait");
alert(data);
//window.location = encodeURI('<%= Url.Action("DownloadDocument", "Documents") %>?DocumentID=' + documentID + '&DownloadType=' + downloadType + '&DownloadPath=' + data);
}
});
注意:我使用了dataType:JSON