我有这个JS代码:
var recipesPost = function(name, ingredients, steps) {
$.post('/api/recipes',
{
name: name,
ingredients: ingredients,
steps: steps
}
).done(function(data) {
$("#result").append("RECIPES POST: OK!<br/>" + JSON.stringify(data) + "<br/>");
}).error(function(error) {
$("#result").prepend(JSON.stringify(error));
});
};
不幸的是,HTTP请求不包含我的数据。它包含两个空变量(steps
和ingredients
),而name
不会出现在任何地方。这是原始请求:
POST http://XXXXXXXXX.com/api/recipes HTTP/1.1
Host: XXXXXXXXX.com
Connection: keep-alive
Referer: http://XXXXXXXXX.com/
Content-Length: 19
Origin: http://XXXXXXXXX.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24
Content-Type: application/x-www-form-urlencoded
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
ingredients=&steps=
知道会发生什么事吗?奇怪的是,如果我用字符串文字替换我发送的数据,那么它会被正确发送:
{
name: "Foo",
ingredients: "Bar",
steps: "FooBar"
}
我已经使用JS调试器检查了name
,ingredients
和steps
变量在调用recipesPost
时是否包含有效数据。
更新:Reigl建议我尝试拨打recipesPost("Foo", "Bar", "FooBar")
。这很有用。
我刚刚再次调试,虽然我的参数类型是String
(使用我的原始代码),但它们有一个toJSON
方法。我使用JQuery从表单传递数据,如$('#recipe_name').attr('value')
(recipe_name是HTML输入)。这是不正确的做法吗?
这是调用HTML
<form>
Name: <input id="recipe_name" type="text" /><br/>
Ingredients: <textarea id="recipe_ingredients"></textarea><br/>
Steps: <textarea id="recipe_steps"></textarea><br/>
<button type="button" onclick="recipesPost($('#recipe_name').attr('value'),$('#recipe_ingredients').text(),$('#recipe_steps').text())">Send</button>
</form>
答案 0 :(得分:2)
编辑:与op的对话,问题在于JQuery版本。升级到1.6.1解决了这个问题。
尝试引用您的密钥名称:
{
'name': name,
'ingredients': ingredients,
'steps': steps
}
答案 1 :(得分:2)
$('#recipe_name').attr('value')
不是IMO的正确方法。
你可以使用,
执行当前代码的更合适的方法是
更改你的HTML
<form>
Name: <input id="recipe_name" type="text" /><br/>
Ingredients: <textarea id="recipe_ingredients"></textarea><br/>
Steps: <textarea id="recipe_steps"></textarea><br/>
<button type="submit" id="send">Send</button>
</form>
你js的某个地方
$('#send').click(function(e){
var rn = $('#recipe_name').val(),
ri = $('#recipe_ingredients').val(),
rs = $('#recipe_steps').val();
recipesPost(rn,ri,rs);
e.preventDefault();
});
答案 2 :(得分:0)
你的名字变量/邮寄价值是多少?您是否在$.post
之前尝试过提醒,以确保您使用的每个变量都有值?