【问题标题】:cannot fetch data with ajax get request无法使用 ajax get 请求获取数据
【发布时间】:2014-02-18 22:20:46
【问题描述】:

我已经建立了一个 mongo 数据库。目前我的数据库中只有一个 id。我正在尝试使用 ajax 获取请求来获取我的 javascript 文件中的数据(使用 ImpactJS 引擎)。

下面是我的数据库现在的样子。它在 mongo db 上。非常基础的测试目的

{
  "_id": "5303a4d4c4fd447a0a7fb528",
  "__v": 0,
  "ans": "ans",
  "hint": "Hints.",
  "score": 20,
  "name": "ABC",
  "pid": 1
}

然后我在我的 javascript 文件中使用 Ajax 请求从数据库中获取“ans”字段。以下是我的相同代码

getQuestionAnswer:function(){
             var requestURL = "http://128.2.238.182:3000/problem?pid=".concat(this.passedQsId);
             var answer;
             $.ajax({
                 type:'GET',
                 url: requestURL,
                 async: false,
                 dataType: 'json',
                 cache: false,
                 success: function(data) {
                     answer = data.ans;
                 },
                 error: function(data) {
                     answer = "<p>ERROR</p>";
                 }
             })
             return answer;
    },

URL 传递正确,我在日志中仔细检查了它。但是,当我尝试在我的其他函数中使用此请求函数时,我会收到无数错误,说“NS ERROR FAILURE”之类的。下面是我收到错误消息的代码行

 checkAnswer: function(id){
         var correctAnswer = this.getQuestionAnswer();
  }

任何帮助将不胜感激。一般来说,我对 javascript 和网络编程完全陌生。这对我来说是一个挑战,因为我主要使用 Java、C++ 进行编码!

【问题讨论】:

  • 试试 - dataType: 'jsonp'
  • 将其更改为 jsonp SyntaxError: missing ; 后出现此错误在声明“_id”之前:“5303a4d4c4fd447a0a7fb528”,
  • 请把 requestURL 的最终结果粘贴给我
  • var requestURL=".. 行下,添加 window.open(requestURL); - 新窗口地址栏中的内容?

标签: javascript jquery ajax mongodb


【解决方案1】:

让 cmets 有点大 - 这里有一些东西要在函数中排序

getQuestionAnswer:function(){
             var requestURL = "http://128.2.238.182:3000/problem?pid=".concat(this.passedQsId);
             var answer;
             $.ajax({
                 type:'GET',
                 url: requestURL,
                 dataType: 'jsonp', /* different domains often require jsonp */
                 cache: false,
                 success: function(data) {
                     console.log(data); /* check */
                     answer = data.ans;
                     return answer; /* needs to be here */
                 },
                 error: function(xhr, status, error) {
                     console.log(xhr);
                     answer = "<p>ERROR</p>";
                     return answer; /* needs to be here *
                 }
             }); 
                 /* ^ semi colon ending here */

             /* return answer; */ 
            /* removed - will not return the 'answer' 
            as the function is now Asynchronous */

    },

更新:示例查看更广泛的功能和示例callback

var answerfunctions = { 
    getQuestionAnswer : function(callback){ /* here accepts the callback function */
             var requestURL = "http://128.,,etc";
             var answer;
             $.ajax({
                 type:'GET',
                 url: requestURL,
                 dataType: 'jsonp',
                 cache: false,
                 success: function(data) {
                     callback(data.ans);
                 },
                 error: function(xhr, status, error) {
                     console.log(xhr);
                     callback("ERROR");
                 }
             }); 
    }

 };

/* call the function and pass a function as an argument to callback to */
answerfunctions.getQuestionAnswer(function(datareturn) { alert(datareturn); });

【讨论】:

  • 再次感谢。仍然存在分号错误,我通过从 URL 中删除端口号以某种方式删除了该错误,但我不确定这是否正确。我按照您提到的进行了所有更改,但是当我在其他函数中调用它时,答案值仍然返回 null :(
  • 你需要url中的端口,还是没有端口号就可以运行?
  • 我已经更新了代码以提供更有意义的错误响应以及在您返回之前查看“数据”中的内容的方法
  • 该死,由于数据库服务器暂时关闭,我无法测试我的代码。但我认为,我不确定,问题是我在另一个函数中调用 getQuestionAnswer() 函数。不知何故,它无法获取价值。回调函数能解决问题吗?一般来说,我是回调函数的新手,所以我对这个话题没有太多了解
  • 如果您可以将更多代码发布到问题中可能会很好,明天会检查
猜你喜欢
  • 2017-01-05
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多