2014-09-01 60 views
0

我与通过jQuery AJAX提交到控制器的客户端形式的Node.js/Sails.js应用:Ajax表单得到错误的控制器的NodeJS调用的Jquery的getJSON

$(function() { 
    $("form").submit(function (e) { 
     e.preventDefault(); 
     var form = $(this); 

     $.ajax({ 
      url: form.attr("action"), 
      type: "POST", 
      dataType: 'json', 
      data: form.serialize(), 

      success: function(json){ 
       alert("Data Returned: " + JSON.stringify(json)); 
      }, 
      error: function(xhr, status, error) { 
       alert("error"); 
      } 

     }); 

    }); 
}); 

我控制器ArticleController.js试图让从Flickr API信息:

** 
* ArticleController.js 
* 
* @docs  :: http://sailsjs.org/#!documentation/models 
*/ 

module.exports = { 
    search: function (req, res) { 

     var searchImg = req.param("search"); 

     var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?"; 
     $.getJSON(flickerAPI, { 
      tags: "mount rainier", 
      tagmode: "any", 
      format: "json" 
     }) 
     .done(function(data) { 
      return res.send(data); 
     }); 
    } 
}; 

但我得到这个错误:

POST http://localhost:1337/Article/search 500 (Internal Server Error) jquery-1.10.2.js:8706 
send jquery-1.10.2.js:8706 
jQuery.extend.ajax jquery-1.10.2.js:8136 
(anonymous function) main.js:7 
jQuery.event.dispatch jquery-1.10.2.js:5095 
elemData.handle 

凑rse我测试了我的控制器没有getJSON调用,它工作正常,返回简单的字符串或JSON值。

回答

2

不能使用jQuery里的NodeJS:这是一个浏览器(客户端) 图书馆 !

最简单的更换,以你的jQuery的通话将使用超简单,超强大request模块: https://github.com/mikeal/request

但是,如果你真的想使用jQuery内的NodeJS,也有几个解决方案那里.. 这些真的不是推荐的解决方案来做一个简单的API调用。 但它们可以用来做一些抓取:用jQuery的所有功能解析一个HTML页面。

在这种不测,你可以试用一下我的buck模块,并给我一些反馈..

var $ = require('buck'); 
+0

当然,现在看来很明显,我并不清醒:D我会尝试这两种解决方案,要求看起来不错,但我也对降压很感兴趣。谢谢! – migswd 2014-09-02 14:06:55

2

您在Sails-App中使用了JQuery($ .getJson) - 这是不可能的。

JQuery使用Browser-API发出请求,在NodeJs中,您没有浏览器API,并且在Sails中没有JQuery。

用NodeJS中的HTTP请求替换你的jQuery代码。没有为该节点文档中一个很好的例子: http://nodejs.org/docs/v0.4.11/api/http.html#http.request

或者你可以使用一个图书馆一样请求(https://github.com/mikeal/request

+0

THX完美的答案呢! – migswd 2014-09-02 14:07:24