调用AJAX调用时出错

时间:2015-07-28 20:24:39

标签: javascript jquery ajax ibm-cloud

编辑

CHEC在这里我的编辑过的JSONP问题我得到了这个错误:

  

无法加载资源:服务器响应状态为500(内部服务器错误)。

var b = ['foo', 'bar'],
    c = new Array('foo', 'bar');

2 个答案:

答案 0 :(得分:0)

默认情况下,浏览器不允许javascript调用另一个域" brsv20cc90e37.ng.bluemix.net",除非brsv20cc90e37应用程序实现了CORS - 基本上只是在其响应中有这个标头:

Access-Control-Allow-Origin: *

*表示允许所有域都调用它。您也可以指定确切的域名。

http://enable-cors.org/server.html

How does Access-Control-Allow-Origin header work?

如果您研究" Access-Control-Allow-Origin"

,可以在线获得大量重要信息

在这种情况下,如果您不拥有brsv20cc90e37应用程序,则应使用服务器端代码而不是客户端javascript调用brsv20cc90e37 API。有些API,比如这个,并不打算从浏览器中调用,所以没有理由让它们实现CORS。

答案 1 :(得分:0)

理想情况下,您应该在Bluemix中创建此请求服务器端,然后使用您的Bluemix应用程序将请求代理到您的客户端应用程序。您收到CORS错误,因为浏览器不允许您从不同的域请求资源。

此外,Business Rules服务看起来不允许使用CORS。您需要编写一些服务器端代码来代理您的请求。

我已在下面发布了一些代码以及Github上的要点,以帮助您隔离问题。

抓取两个文件并将它们放在一个目录中,然后修改// Dispose of any resources that can be recreated. 中包含业务规则用户名和密码的两行。

package.json https://gist.github.com/jsloyer/2bf436f342e1d24c3099

app.js

app.js https://gist.github.com/jsloyer/e5a953cf5691a4aeefc2

{
  "name": "bluemix-business-rules",
  "version": "0.0.1",
  "dependencies": {
    "express": "~4.10.8",
    "restler": "~3.2.2",
    "async": "~0.9.0",
    "body-parser": "~1.12.4"
  },
  "engines": {
    "node": ">=0.10"
  },
  "author": "IBM Corp.",
  "contributors": [
    {
      "name": "Jeff Sloyer",
      "email": "jbsloyer@us.ibm.com"
    }
  ],
  "license": "Apache-2.0",
  "scripts": {
    "start": "node app.js"
  }
}

然后运行var app = require("express")(), restler = require("restler"); app.get("/", function(request, response) { var json = { "employeeID": "jujuju", "loanAmount": 10517320, "theEmployee": { "seniority": 3, "annualSalary": 10517320, "nbOfExtraVacationDaysBasedOnSeniority": 10517320 }, "creditAmount": 20000, "__DecisionID__": "string", "AnnualSalary": 20000 }; var options = { username: "replaceme", password: "replaceme" }; var url = "https://brsv2-6855bc66.ng.bluemix.net/DecisionService/rest" + "/vacationsRuleApp/1.0/vacationsRuleProject/json"; restler.postJson(url, json, options).on('complete', function(data) { response.send(data); }); }); app.listen(process.env.VCAP_APP_PORT || 8080);

打开您的网络浏览器并导航到它为您提供的网址。希望我们可以尝试调试最新情况。