【发布时间】:2013-05-18 07:22:54
【问题描述】:
在 Chrome 中,这就像它应该做的那样执行 HTTP PUT,但在 FireFox 21 中却没有。 javascript 控制台或后端没有错误。
这是 HTML:
<div id="createTeamModal" class="small reveal-modal">
<form id="createTeamForm">
<div class="row"><p id="teamFlavorText" class="lead">Building a new team</p></div>
<div class="row">
<div class="small-4 large-4 columns"><label>Team Name:</label></div>
<div class="small-6 large-6 columns"><input name="teamName" id="teamName" type="text" size="20"/></div>
</div>
<div class="row"><p class="lead">Does this team work for a business?</p></div>
<div class="row">
<div class="small-4 large-4 columns"><label>Business Size:</label></div>
<div class="small-6 large-6 columns">
<select id="businessSizeSelect" name="businessSizeSelect">
<option value="1">Nope, I work alone</option><option value="2">2 to 49</option><option value="3">50 to 99</option><option value="4">100 to 999</option><option value="5">1,000+</option>
</select>
</div>
</div>
<div id="businessLocationDiv" class="row" style="display: none; margin-top: 20px;">
<div class="small-4 large-4 columns"><label>Business Location:</label></div>
<div class="small-6 large-6 columns">
<select id="businessLocationSelect" name="businessLocationSelect">
</select>
</div>
</div>
<div id="businessTypeDiv" class="row" style="display: none; margin-top: 20px;">
<div class="small-4 large-4 columns"><label>Industry:</label></div>
<div class="small-6 large-6 columns">
<select id="businessTypeSelect" name="businessTypeSelect">
</select>
</div>
</div>
<div class="row" style="margin-top: 20px;">
<div class="large-offset-10 small-1 large-1 columns">
<button id="createTeamButton" class="small button">Create</button>
</div>
</div>
</form>
<a class="close-reveal-modal">×</a>
</div>
这里是 jQuery:
$("#createTeamButton").click(function () {
var teamObject = new Team();
teamObject.description = $("#teamName").val();
teamObject.businessSize = $("#businessSizeSelect").val();
teamObject.businessType = $("#businessTypeSelect").val();
teamObject.businessLocation = $("#businessLocationSelect").val();
$.ajax({
type: "PUT",
url: "/ajax/rest/team",
dataType: "json",
data: JSON.stringify(teamObject),
success: function () {
// Reload the team select box
loadTeamSelectBox();
// Pop up the site create modal
$('#createSiteModal').foundation('reveal', 'open');
},
error: ajaxErrorHandler
});
});
我在 Fiddler 中观察到了它们,工作 (Chrome) 和不工作 (Firefox) 之间的区别在于 HTTP PUT 在 Chrome 中触发而在 Firefox 中不触发。
现在,我知道并非所有浏览器都保证 jQuery.ajax PUT。
我读过
- Are the PUT, DELETE, HEAD, etc methods available in most web browsers?
- http://annevankesteren.nl/2007/10/http-method-support
这些网站重申 PUT 可能无法在所有浏览器中运行,但应该在 FF 中运行。
最后,我用 FF21 和 PUT 实现了以下目标
我当然可以解决这个问题,但在我看来这应该可行。我宁愿不 jerry-rig 一些东西,而是让 jQuery 的 .ajax 正常工作。
其他细节: * jQuery 版本 2.0.0 * 后端是 Spring3
[编辑以添加 HTML]
【问题讨论】:
-
我认为它不会在所有浏览器中都支持。但这里很少有类似的链接stackoverflow.com/questions/5846741/…stackoverflow.com/questions/5894400/…
-
如果您认为这是一个 jQuery 错误,您应该提供您正在使用的 jQuery 的确切版本。但我不认为它与
PUT有任何关系,因为 URL 也发生了变化。 -
我更新了问题以包含所要求的详细信息。事实证明 URL 没有改变。我看到的 GET 是由 Chrome 和 Firefox 完成的。我今天看到的区别在于,工作(Chrome)实际上执行 HTTP PUT,而失败(Firefox)不执行 HTTP PUT。
-
适用于我的 Firefox 21.0 和 jQuery 2.0.2。您的问题不包括问题的根源。 PLBKAC?
标签: jquery ajax firefox xmlhttprequest http-put