使用jquery-ajax执行curl命令

5

我使用以下输入执行了curl命令连接到MongoDB。

curl --data 'cmd={"geoNear" : "items", "near":[6.8590845,79.9800719]}' 'http://72.123.xxx.xxx:27080/weather/_cmd'

我想使用jsonp或json来执行并获取响应。我尝试了以下jsonp请求。
var url =  "http://72.123.xxx.xxx:27080/weather/_cmd";
$.getJSON(url + "?callback=?",
    {
        cmd:{"geoNear" : "items", "near": 6.8590845,79.9800719]}
    },
    function(tweets) { }
);

我从控制台得不到任何信息。请帮我解决这个问题,谢谢。


你尝试过什么?(http://mattgemmell.com/2008/12/08/what-have-you-tried/) - freakish
我更新了问题,抱歉。 - Lasitha Benaragama
2个回答

5
最终我想出了解决方案。
$.ajax({
    url: '/weather/_cmd',
    type:'POST',
    dataType: 'json',
    crossDomain : true,
    data: {
        cmd: JSON.stringify({
            "geoNear" : "items",
            "near": [6.8590845,79.9800719]
        })
    },
    success: function(res) {
        //do stuff with res
    }
});

ProxyPass /weather http://72.123.xxx.xxx:27080/weather/_cmd
ProxyPassReverse /weather http://72.123.xxx.xxx:27080/weather/_cmd

将上述代理传递添加到您的Apache中并尝试使用它。 它会工作。问题是您无法使用jsonp传递POST请求。 MongoDB需要POST请求。这是一种方法。 :D我已经测试过它,对我来说完美地运行。它不会接受json,您必须将其作为字符串传递。


1
你可能获取不到任何内容,因为你的MongoDB实例不支持JSONP(而你需要它,因为通常情况下你无法进行跨域ajax请求),或者你的查询不正确(显然你必须使用?jsonp=而不是?callback=)。
一种方法是直接使用JSONP。由于你正在使用jQuery,你可以尝试这样做:
$.ajax({
    url: 'http://72.123.xxx.xxx:27080/weather/_cmd',
    dataType: 'jsonp',
    jsonp: 'jsonp', // <-- the name used in '?jsonp=' part of url
    data: {
        cmd: {
            "geoNear" : "items",
            "near": [6.8590845,79.9800719]
        }
    },
    success: function(res) {
        console.log(res);
    }
});

根据这个StackOverflow答案: MongoDB是否具有本地REST接口? 如果您使用--jsonp选项启动MongoDB实例(以启用JSONP支持),则应该可以工作。尽管我没有尝试过。
还可能存在其他问题。例如,数据库可能会简单地断开连接,您可能没有特权等。通常,直接从客户端连接到数据库永远不是一个好主意。您应该使用Web服务器作为中间人。

我使用了你的代码,但它并没有起作用。Curl命令完美地工作,并且总是给我输出结果。请帮帮我。 - Lasitha Benaragama
MongoDB不接受JSON格式,而是将其作为字符串处理,这是主要问题所在。此外,JSONP不支持POST请求,而MongoDB只接受POST请求。最终,我找到了解决方案。 - Lasitha Benaragama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接