【问题标题】:CasperJS POST AJAX is not workingCasperJS POST AJAX 不工作
【发布时间】:2014-12-16 07:40:06
【问题描述】:

我正在通过 ajax 发送数据。代码正在运行,但 AJAX 请求不起作用。发送的数据没有保存。

我尝试过使用webSecurityEnabled: false,但还是不行。

这就是我正在尝试的方式:

var casper = require("casper").create({
    logLevel:   "error", //debug
    verbose:    true,

    pageSettings: {
        loadImages:  true,          // do not load images
        loadPlugins: false,         // do not load NPAPI plugins (Flash, Silverlight, ...)
        webSecurityEnabled: false // ajax 
    }
});

........................

var save_file="http://aaa.com/js_save.php";

for(var ii=0; ii<title_link.length; ii++)
{
    this.echo(title_link[ii]);

    //var save_data = tlink.serialize();
    var save_data = {"title":"title", "link":title_link[ii]};

    jsonObject_fields = this.evaluate(function(save_file) {
        params = save_data;

        try {
            return JSON.parse(__utils__.sendAJAX(save_file, 'POST', params, false));
        } catch (e) {
            console.log("Error in fetching json object");
        }
    }, {save_file : save_file});

    try{
        //require("utils").dump(JSON.stringify(jsonObject_fields.name));
    }
    catch(e)
    {
        console.log("Error is: "+e);
    }

} // for

【问题讨论】:

    标签: javascript ajax casperjs


    【解决方案1】:

    我不完全理解您的问题,但在代码方面您需要将变量显式传递到页面上下文中。 casper.evaluate 是沙盒的,在 casper 上下文和页面上下文之间传递数据的唯一方法是使用参数和返回值。外部定义的变量不能在casper.evaluate内部使用。

    您需要将save_data 显式传递给页面上下文:

    var save_data = {"title":"title", "link":title_link[ii]};
    
    jsonObject_fields = this.evaluate(function(save_file, save_data) {
        try {
            return JSON.parse(__utils__.sendAJAX(save_file, 'POST', save_data, false));
        } catch (e) {
            console.log("Error in fetching json object");
        }
    }, save_file, save_data);
    

    【讨论】:

      【解决方案2】:
      casper.then(function () {
          var wsurl = "http://siddimaniaajax.esy.es/ajaxCall.php";
          var params = {name:"siddhartha"};
      
          var jsonObject_fields = casper.evaluate(function(wsurl, params) {
              try {
                  return JSON.parse(__utils__.sendAJAX(wsurl, 'POST', params, false));
              } catch (e) {
                  console.log("Error in fetching json object");
              }
          }, wsurl, params);
      
          console.log(JSON.stringify(jsonObject_fields));
      });
      
      <?php
      
      if(isset($_POST['name']) && !empty($_POST['name']))
      {
      
       $arr = array('name' => $_POST['name']);
        echo json_encode($arr);
      }
      
      ?>
      

      【讨论】:

      • 对您所做的工作及其工作原理的解释,如果需要,还可以提供进一步阅读的链接,这是一个很好的答案
      • 好的,我会的,谢谢Toni,其实这是我在stackoverflow上的第一个答案,谢谢指出。
      猜你喜欢
      • 1970-01-01
      • 2014-05-07
      • 2011-07-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多