2015-12-28 62 views
0

我试图从列表框中使用onchange=获取和发布数据,但我得到的错误Reference Error: Cant find variable: getMessage getMessage是包含ajax get和post的函数的名称而我正在寻找这意味着它由于某种原因无法找到该功能。有谁知道为什么?我的代码如下所示。AJAX查询获取和发布数据使用ajax到node.js获取错误

<script type="text/javascript"> 
    function getMessage() { 
    var data = { message : {$("#messageselect").val(); }}; 

    $.ajax({ 
     url: "/message", 
     type: "GET", 
     data: JSON.stringify(data), 
     dataType: 'jsonp' 
    }) 

    $.ajax({ 
     url: "/message", 
     type: "POST", 
     dataType: 'json', 
     contentType: 'application/json', 
     success: function(data) { 
      console.log(data); 
     } 
     error : function(err) { 
      console.log("error fetching message"); 
     } 
    }); 
} 
</script> 

服务器:

app.post('/message', function(req, res) { 
    console.log(JSON.stringify(req.body)); 
    Message.findOne({ 'page.message' : req.data }, function(err, message) {  
     if(err){ 
      throw err; 
     }   
     res.send(message); 
    }); 
}); 

HTML:

<form method="POST"> 
    <select multiple="multiple" class="messageselect" onchange="getMessage()" id="messageselect"> 
    <% if(message) { %> 
     <% for(i=messagecount-1;i>=0;i--) { %> 
      <option value="<%= message[i].page.message %>"> 
       From: <%= message[i].page.username %> 
       Message: <%= message[i].page.messagetitle %> 
      </option> 
     <% } %> 
    <% } %> 
    </select><br><br><br> 
</form> 

回答

1

函数中的语法错误。试试这个。

function getMessage() { 

    var data = { 
     message: $("#messageselect").val() 
    }; 


    $.ajax({ 
     url: "/message", 
     type: "GET", 
     data: JSON.stringify(data), 
     dataType: 'jsonp' 
    }); 

    $.ajax({ 
     url: "/message", 
     type: "POST", 
     dataType: 'json', 
     contentType: 'application/json', 
     success: function (data) { 
      console.log(data); 
     }, 
     error: function (err) { 
      console.log("error fetching message"); 
     } 
    }); 
} 
+0

请更具体一些,没有人希望在此上执行差异扫描以查找您已更改的字符 –

+1

后需要逗号:成功:功能(数据){console.log(data); } –

0

你需要以不同的定义功能,如:

var getMessage = function() { 

... 

} 

或....

也许我在这里错了。出于某种原因,我认为你需要将该函数赋值给一个变量名以引用它。我的下一个猜测是定义你的函数的代码不知何故进入页面。您应该使用您的开发人员工具(我使用Chrome浏览器中的工具,但是您喜欢的浏览器),并查看您是否可以实际在页面的源代码中找到该功能。

+0

我只是想知道这是如何不同?我从来没有使用过这种函数定义的方法,在类似的情况下也没有遇到任何问题。 – Karan

+0

如果'getMessage'是一个匿名的IIFE,这将是正确的,但是函数被定义。设置它的变量引用除命名空间外没有任何变化 –

+0

我想我看到了这个问题。您的ajax json中的“成功”参数后缺少逗号。 –