通过jQuery Ajax在Express.js和PHP之间进行通信

时间:2014-04-04 04:15:10

标签: php jquery node.js express

我正在开发一个小项目,我在Express.js中加载了一个网页(index.html),并将一些数据发送到在MAMP服务器上运行的PHP脚本。 PHP脚本处理数据并将JSON编码的数组返回到网页,最后Node.js服务器使用socket.io将数据发送到连接的客户端。

我使用jQuery Ajax与PHP通信时遇到问题。我使用POST将数据发送到PHP,我知道PHP收到了这些数据,但我不知道如何从PHP获取响应以了解处理过程。

我没有使用Node.js的经验。我能做些什么让这件事有用?

到目前为止,这是我的代码

Node.js - Express.js

    var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , db = require('./routes/db')
  , http = require('http')
  , socketio = require('socket.io')
  , path = require('path');

var app = express();


app.set('port', process.env.PORT || 3000);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser()); //Middleware
app.use('/', express.static(__dirname + '/public'));

if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

var server = http.createServer(app);

server.listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

HTML页面

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Site</title>
    <script src="js/jquery-2.0.3.min.js" type="text/javascript"></script>
</head>

<body>

    <div id="formContainer">
        <form enctype="multipart/form-data">
          <input type="text" name="texto">
          <button type="button" id="buttonSend">Enviar</button>
        </form><br/><br/>      
    </div>



<script type="text/javascript">

$('#buttonSend').click(function(e){ 
  e.preventDefault();
  $.ajax({
        url: 'http://localhost:8080/NodePHP/test.php',
        type: 'POST',
        dataType: "json",
        data: {value: 1},
        success: function(data){
            if(data.success == true){
                alert("Perfect!");
            }
            else{
                alert("Error!");   
            }
        },
        error: function(xhr,status,error){
            //alert("Error de llamada al servidor");
            alert(xhr.responseText);
            //$('#botonUsarFoto').css('display','block');
        }
    });         
});


</script>
</body>
</html>

PHP脚本

<?php

$number = $_POST['value'];
echo $number;

// move the image into the specified directory //
if ($number == 1) {
    $data = array("success"=>"true");
    echo json_encode($data);
} else {
    $data = array("success"=>"false");
    echo json_encode($data);
}

?>

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:0)

为了使用Node发出请求,我们将使用httpquerystring模块。这是一个从the Nodejitsu folks精心采用的例子:

var http = require('http');
var querystring = require('querystring');

var data = querystring.stringify({
  value: 1
});

var options = {
  host: 'localhost',
  path: '/myPHPScript',
  method: 'POST'
};

callback = function(response) {
  var str = '';
  response.on('data', function (chunk) {
    str += chunk;
  });

  response.on('end', function () {
    console.log(str);
  });
}

var req = http.request(options, callback);
req.write(data);
req.end();

或者,您可以使用request模块,但首先要使用它。