Jquery发布数据

时间:2011-05-13 02:20:48

标签: jquery rest

我有这个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请求不包含我的数据。它包含两个空变量(stepsingredients),而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调试器检查了nameingredientssteps变量在调用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>

3 个答案:

答案 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之前尝试过提醒,以确保您使用的每个变量都有值?