表格帖子和jquery帖子之间的区别

时间:2012-06-29 15:15:17

标签: php jquery html post

我需要知道:

之间的确切区别
<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但没有回复。如果我提交第一个,我会得到正确的答复。

5 个答案:

答案 0 :(得分:14)

来自评论:

  

我正在发布到另一个网站

啊哈!这是你的问题。出于安全原因,浏览器会将AJAX阻止到外部网站。抱歉,您不会通过XHR请求发出该请求。

如果其他网站希望您与他们沟通,他们可以通过JSON-P公开这部分网站,其工作方式如下:

  1. 我的网站将<script src="http://othersite.com/signon.js?username=foo&password=bar&callback=myCallback">添加到源代码中(是的,为此使用GET很麻烦,但JSON-P不能以任何其他方式工作),并创建一个名为myCallback的函数处理响应数据。
  2. 其他网站登录,然后返回myCallback({success: false, errorMessage: "Incorrect password, try again!"})
  3. 之类的内容
  4. 该脚本在我的网站上运行,调用myCallback,一切都很开心。
  5. 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