2012-02-28 74 views
0

进行GET请求很简单,只需在锚标记的href属性中指定一个URL即可。如何将JSON对象追加到GET url?

但是,如何将JSON对象添加到该URL?

我猜这必须通过jQuery来完成......但我无法使用AJAX,或者浏览器不显示响应。

到目前为止,我试过这个:$j("#gen").attr("href", $j("#gen").attr("href") + "?" + JSON.stringify({object: data}));但它不附加数据。这是触发点击

+1

你的意思是你不能使用AJAX或响应没有呈现?你只是想生成一个链接? – Josh 2012-02-28 04:39:28

+0

是的,我只是想做一个HTTP GET请求,以便服务器可以重定向我的浏览器,基于参数中的数据。 – DerNalia 2012-02-28 04:46:48

+1

严格地说,不需要jQuery,你只需要正确编码JSON:'link'。但我不认为你为你的问题提供了足够的信息(上下文)。 – 2012-02-28 04:49:21

回答

1

这应该工作:

jQuery("#gen").attr("href", jQuery("#gen").attr("href") + "?" + jQuery.param({object: data})); 
2

一个GET请求具有查询字符串参数。如果它是您真正想要的GET请求,那么您可以将对象上的属性映射到请求上的键值对。

例如:

JSON object: { prop1: val1, prop2: val2 } 
url get querystring: ?prop1=val1&prop2=val2 

但是,如果你要的对象发送到服务器,也许你真的想要一个POST?在这种情况下,JSON对象将位于POST的主体中。

3

GET请求中的任何值都应该被URL编码到请求字符串中。

有一个jQuery.get()函数可以为你做这件事,但它所做的只是将一组名称/值对作为查询字符串参数序列化。

我不确定你的意思是不能使用AJAX。使用jQuery,你可以这样做:

$.get("foo/bar", { foo: "foo", bar: "bar" }, 
    function(data){ 
    $("#myTarget").append(data); 
    }); 

假设当然返回值是HTML。

好吧,我想我明白了一点。如果你只想把一些对象转换为查询字符串,那么你就可以推出自己的功能很简单:

function toQueryString(obj){ 
    var formattedVals = []; 

    for(var prop in obj){ 
     formattedVals.push(prop + "=" + obj[prop]); 
    } 

    return formattedVals.join("&"); 
} 

你可以看看它会通过调用它这样工作:

var data = { foo: "foo", bar: "bar" }; 

alert(toQueryString(data)); 

无论如何,这应该让你有90%的方式。

+0

+1的jQuery语法将JSON映射到查询字符串参数。 – bryanmac 2012-02-28 04:58:10

+0

你的函数不适用于嵌套结构? – DerNalia 2012-02-28 05:21:45

+0

@DerNalia - 当然不是......如何用一个简单的名称值配对表示一个嵌套结构?大多数实现需要一个简单的对象或字典。 – Josh 2012-02-28 15:08:57