【问题标题】:How to issue a GET request with jQuery/ajax?如何使用 jQuery/ajax 发出 GET 请求?
【发布时间】:2013-06-01 16:26:58
【问题描述】:

我正在尝试从运行在 mongolab 上的 mongodb 数据库加载数据。文档非常好,但奇怪的是如何有 PUT 和 POST 的示例,但没有关于 GET 的内容:

https://support.mongolab.com/entries/20433053-REST-API-for-MongoDB

谁能告诉我如何使用 REST 将数据加载到对象?假设 url 中的查询将始终返回单个文档或不返回任何文档。

我想是这样的:

  $scope.getDocument = function() {
    // alert("called");
    $.ajax( { url: "MY QUERY",
     data:  //????????
     type: "GET",
     contentType: "application/json" } );
  };

有人可以指导我吗?

编辑:我现在有了这个并且它有点工作,但显然我的回报是“[object Object]” - 如何从中获取有意义的数据?

$scope.getDocument = function() {
  $.ajax( { url: "MY QUERY",
  type: "GET",
  success: function(data){
         alert(data);
       }
     }
     );
  };

EDIT2:现在我有了这个,但由于某种原因我无法从 JSON 中提取字段:

  $scope.getDocument = function() {
    // alert("called");
    $.ajax( { url: "MY QUERY",
     type: "GET",
     dataType: 'json',
     success: function(data){
         $scope.userId=data.userid; // THIS DOES NOT WORK
         $scope.foo=true; // THIS DOES

       }
     }
 );
 };

【问题讨论】:

标签: javascript jquery mongodb rest angularjs


【解决方案1】:

GET 请求不会向服务器发送数据,这就是忽略 ajax 调用设置的 data 字段的原因。

警报消息为您提供[object Object],因为这是Object 的标准toString 实现。如果您想查看服务器返回的内容,请使用console.log(data),如果服务器返回 JSON,您将在开发控制台上看到它。

此外,如果您使用任何 Web 开发工具(例如 Chrome/Firefox/Safari 的开发者控制台),您可以检查您的 JavaScript 代码正在执行的网络调用,这样您就可以查看您的请求和响应的详细信息正在获得。

如果您不知道如何打开开发者控制台,请在 Chrome 上:单击菜单按钮 -> 工具 -> 开发者工具。然后在开发者工具窗口中转到网络选项卡并重新加载您的页面以查看请求。

顺便说一句:要在“网络”选项卡中仅查看 AJAX 调用,请使用底部的 XHR 过滤器(这意味着 XMLHttpRequest 是用于执行 ajax 调用的对象)。如果您使用 Firefox+Firebug,步骤类似。如果你使用 IE.. 你也有一个开发控制台,但至少在 IE8 中太简陋了,所以最好使用一些 webkit 浏览器或 firefox。

【讨论】:

  • 您能否指导我以某种方式从我从 db 获得的数据中提取字段并将它们分配给变量?你的帖子很有帮助,谢谢!
  • data 是一个对象,因此您可以像访问任何对象一样访问它:data.fieldconsole.log(data) 显示所有对象字段的转储(在 Chrome/Firefox 中,您甚至可以展开它并从控制台“导航”)。在另一个答案中使用 JSON.stringify -like-会给你类似的信息(但不是必需的......至少在 Chrome/Firefox 中)。还要查看请求/响应详细信息,请在“网络”面板中单击它,它将对您的调试有很大帮助。
  • 另一个技巧更多...您可以输入“debugger”关键字来停止您的应用程序并检查变量,只需将其添加到您的成功回调中,然后打开开发人员工具。当“调试器”被点击时执行将停止,您可以在那里检查所有变量。
  • 不幸的是,当我写console.log(data) 时,我得到的是ReferenceError: data is not defined。我使用 angularjs,所以所有变量都在控制器“类”(?)内。当我将此行添加到成功部分时:$scope.userId=data.userid; 不幸的是,没有任何反应。我正在加载的 json 对象具有“userid”字段。我想将该字段下的值分配给“userId”变量。
  • 我基于您的示例中的响应:)(其中数据被定义为成功函数的参数)。由于我没有足够的详细信息来帮助您解决此错误...尝试使用debugger 关键字或断点,即:debugger; $scope.userId=/*...*/,然后您可以使用调试器检查所有上下文。有关调试的更多帮助,请参阅:developers.google.com/chrome-developer-tools/docs/…
【解决方案2】:

是的,它可能与您的代码非常相似。您应该添加成功回调来管理响应:

$.ajax({
 url: 'your url',
 type: 'get',
 // you can use data to include url path parameters. For example:
 // data: {pageIndex: 1, pageSize: 5},
 contentType: 'application/json',
 // This is the key
 success: function(data, response, xhr){
   // data variable should contain your info. You can inspect the fields:
   console.log(JSON.stringify(data));
 }
});

关于回调参数的更多信息,您可以查看this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2013-10-22
    • 2011-06-18
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多