3

我是 REST API 的新手**(这真的是我的 REST 问题吗?)**

我想通过使用 Cypher 从 neo4js 获取所有节点

START n = node(*)
return n;

如果我使用 jquery ajax POST 或 GET 方法,我该如何使用

文档中它推荐

POST http://localhost:7474/db/data/cypher
Accept: application/json
Content-Type: application/json

在我的代码中我写

 $.ajax({
      type:"POST",
      url: "http://localhost:7474/db/data/cypher",
      accepts: "application/json",
      dataType:"json",
      contentType:"application/json",
      data:{
             "query" : "start n  = node(*) return n",
             "params" : {}
           },
      success: function(data, textStatus, jqXHR){
                      alert(textStatus);
                        },
      error:function(jqXHR, textStatus, errorThrown){
                       alert(textStatus);
                        }
             });//end of placelist ajax  

我的问题是什么?错误警报如下
在此处输入图像描述

4

1 回答 1

8

你没有说你得到什么样的错误,但是运行与你完全相同的代码,我得到以下错误:

XMLHttpRequest cannot load http://127.0.0.1:7474/db/data/cypher.
Origin http://127.0.0.1:3000 is not allowed by Access-Control-Allow-Origin.

所以我假设这是您遇到的错误。

执行跨域 Ajax 调用时,有两种选择:

  1. JSONP,Neo4J 不支持。

  2. 跨域资源共享 (CORS)。“CORS 背后的基本思想是使用自定义 HTTP 标头来允许浏览器和服务器充分了解彼此,以确定请求或响应是成功还是失败”

在 POST 之前发送的 OPTIONS 请求(预检请求)从 Neo4J REST 服务器返回以下标头:

Access-Control-Allow-Origin:*
Allow:OPTIONS,POST
Server:Jetty(6.1.25)

这里缺少一个关键的标题,即Content-Type标题。这意味着当此标头与 POST 请求一起发送时,POST 请求将失败,这正是您的 $.ajax() 调用中发生的情况。

如果您删除以下行,POST 将成功

contentType:"application/json",

从你的$.ajax()电话。

这将阻止 jQuery 发送 Content-Type 标头。

于 2013-01-03T21:32:47.970 回答