2015-09-10 4 views
0

Я не могу понять, почему hasOwnProperty возвращают ложные по следующему сценарию:Почему isOwnProperty возвращает false?

стороне клиента:

<html> 
    <head> 

     <script type="text/javascript"> 

      var client = [ 
          {"clientName":"", "clientNickName": ""}, 
          {"clientName":"", "clientNickName": ""}, 
          {"clientName":"", "clientNickName": ""} 
         ];   



      function onSubmit() { 

       // update data 
       client[0].clientName = "AAA"; 
       client[0].clientNickName = "BBB"; 
       client[1].clientName = "CCC"; 
       client[1].clientNickName = "DDD"; 
       client[2].clientName = "EEE"; 
       client[2].clientNickName = "FFF";    

       // create request 
       xmlhttp=new XMLHttpRequest();     
       xmlhttp.open("POST","~/process_post",true);  
       xmlhttp.setRequestHeader("Content-Type", "application/json");    

       // send 
      xmlhttp.send(JSON.stringify(client));         

       return true; 
      } 

     </script> 

    </head> 

    <body > 

     <form action="http://127.0.0.1:8081/process_post" method="POST">           

      User Name: 
      <input type="text" name="userName"> 
      <br>  
      Nick Name: 
      <input type="text" name="nickName"> 
      <br>  

      <input type="submit" value="Submit" onclick="return onSubmit()"> 
      <br>       
     </form> 

    </body> 
</html> 

стороне сервера:

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
app.use(bodyParser.json()); 

app.use(express.static('public')); 


app.post('/process_post', function (req, res) { 

    var x = req.body; 
    if (x[0].hasOwnProperty('clientName')) { 
    console.log("yes: clientName exsists"); 
    } 

    console.log("result: " + req.body); 
}) 



var server = app.listen(8081, function() { 

    var host = server.address().address 
    var port = server.address().port 

    console.log("Example app listening at http://%s:%s", host, port) 

}) 
  • Я обновил Q, после того, как получить некоторые комментарии, которые не помогли.

  • Почему сервер не анализирует данные json правильно? Катастрофа сервера при вызове hasOwnProperty на х [0]: «TypeError: Не удается прочитать свойство„hasOwnProperty“неопределенных»

Благодарности

+2

Вы отправляете массив. Свойства 'client' и' clientName' существуют в элементах массива, а не в самом массиве. Попробуйте 'x [0] .hasOwnProperty ('clientName')'. –

+0

Не работает, он разбивается (TypeError: Не удается прочитать свойство hasOwnProperty не определено) –

+0

Проверьте, какие данные фактически отправляются на сервер –

ответ

1

Первое, что вы не можете отправить массив в качестве сырья объект.

Вам необходимо отправить строковое представление.

Использование xmlhttp.send(JSON.stringify(client));


Затем, когда вы делаете var x = req.body; вы назначаете массив переменной x.

Таким образом, вам нужно проверить свои элементы на нужное вам свойство, а не на массив.

Пробег x[0].hasOwnProperty('clientName')

+0

Я попробовал ваше предложение, но не помогло (я обновил поток ... вы можете проверьте его и посмотрите сами) ... –

+0

Вы проверили, что на самом деле 'req.body' на сервере? –

+0

Что мне нужно проверить? –