【发布时间】:2014-01-16 10:21:35
【问题描述】:
首先,这个问题主要涉及 HTTP 请求、BackboneJS、某种 RESTful API(例如 Slim API),以及这些东西如何相互配合。此外,这个问题来自一个在服务器端没有太多经验的人,而不仅仅是处理基本的 PHP/MySQL 东西。
我一直在看 Backbone,也看过一些关于在后端使用 RESTful API 的教程(包括this one from 9bit)。
我还阅读了 this answer 的 StackOverflow 问题(了解 BackboneJS REST 调用)。
如果我打开一个 JS 文件,然后键入一些代码来发送一个 POST 请求,例如:
(function() {
var http = new XMLHttpRequest();
var value = '{ "prop1": "value 1", "prop2": "value 2" }';
http.open('POST', 'dir', true);
http.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
http.setRequestHeader('Content-Length', value.length);
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(value);
})();
我在控制台中看到它发送的 POST 请求看起来像这样:
Method: POST
Body: { "prop1": "value 1", "prop2": "value 2" }
Location: http://localhost/~myusername/Todo/dir/
然后,由于它只是我的本地服务器,服务器会发回一个响应,其中包含显示该目录中文件的基本 HTML 页面等。
我也尝试使用 GET 请求来检索类似的 JSON 对象,但显然我无法从该位置获取任何内容,大概是因为我试图从某个空文件夹请求的对象在任何地方都不存在。
我的问题是,当您使用诸如 .save() 之类的 BackboneJS 方法时,据我了解,在这种情况下,它可能会使用 PUT 方法来发送带有对象主体的请求,可能被解析为一个字符串,指向一个目录,例如“article/id”,其中“id”可能类似于“43”(可能是您发送的任何模型属性的相应 id)。所以...
1) API(例如Slim)对该请求做了什么?
2) 将这些对象属性保存到(MySQL 数据库)的位置在哪里?
3) 是否有一个文件,例如 'index.php',位于目录 'article' 中,其中脚本获取 POST 请求正文中的参数并用于与 MySQL 数据库通信? (我想知道为什么该位置只是一个“文件夹”,例如“/article”。换一种说法,每当您输入像“http://www.mywebsite.com”这样的网站时,服务器都会自动查找“ index'页面,例如'index.html',并自动打开该文件作为该目录的默认文件。在使用位置'/somefoldername'作为位置的上下文中是否发生相同类型的事情HTTP 请求)?
基本上,我觉得很奇怪,您只会向某个文件夹发送 HTTP 请求,而不是向处理请求并与数据库通信的特定 PHP 文件(例如)。使用带有 RESTful API 的 BackboneJS,我们的理论文件夹 '/article' 是否会存在,或者只是出于某种原因附加到 URL 中?
非常感谢。
【问题讨论】:
-
听起来您获得的是目录列表,而不是实际调用的代码,对吗?你配置你的服务器来处理 PHP 文件了吗?
-
是的,我安装了 PHP,等等。我的 AMP 堆栈工作正常,例如,如果我向一个文件(例如,'add_to_db.php')发送一个 POST/GET 请求,该文件与我的MySQL 数据库。在这方面没有问题。
-
是的,如果我向空目录发送请求,我希望得到一个目录列表。我的问题很简单,为什么在使用 Backbone 和 RESTful API 时,您会向 just 目录而不是脚本文件(如 PHP 文件)发送请求?我在这里缺少什么吗?
-
请求
dir而不是file对我来说没有意义,您从哪里看到需要这样做的(文档)? -
在我的问题第一部分列出的链接中。此外,如果您在 Google 上搜索 BackboneJS 以及它如何与服务器上的 RESTful API 一起工作,那么整个网络上都有大量教程。
标签: php http rest backbone.js slim