将prototypejs ajax请求转换为C ++中的libcurl

时间:2011-02-11 21:40:16

标签: ajax libcurl prototypejs

我在原型js中有一个ajax请求基本上是这样的:

new Ajax.Request("http://www.example.com", {
    method: 'post',
    postBody: '{"params":{"first":"one", "second":"two"}}',
    contentType: 'text/json'  
    requestHeaders: {  
        'Content-Length': 42  
    }  
    onComplete: function() {}  
});

我尝试在libcurl中这样做:

struct curl_slist *slist = NULL;
slist = curl_slist_append(slist, "Content-Type: text/json");
curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com");
curl_easy_setopt(curl, CURLOPT_HEADER, slist);
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 42);
curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, "{\"params\":{\"first\":\"one\", \"second\":\"two\"}}");

但是在服务器端,它不像原型实现那样识别帖子体。

我未能在此方面取得任何进展,所以我希望这里有人可以提供我需要继续的见解。谢谢!

2 个答案:

答案 0 :(得分:0)

我怀疑Prototype检测到postBody是用JSON编写的,并在将其发送到服务器之前将其转换为URL-Encoding(并且libcurl没有)。您可以安装Firebug以查看会发生什么。

尝试在libcurl中以postBody /发送以下内容:

params[first]=one&params[second]=two

答案 1 :(得分:0)

另一个想法是将Prototype sends by default的头添加到libcurl:

X-Requested-With: XMLHttpRequest
X-Prototype-Version: (Prototype.Version)
Accept: text/javascript, text/html, application/xml, text/xml, */*