执行从.post返回的JavaScript

时间:2014-08-02 16:40:27

标签: javascript php jquery post

我希望JavaScript执行从帖子返回的数据。我找到了几个类似的线程,但没有任何东西可以为我清除它。 eval()会引发意外的标识符错误。

帖子:

$.post("./save.php", 
  {
    'images_key' : images_array,
    'userid_key' : $('#userid').val(),
    'avatar_key' : $('#avatar_name').val()
  },
  function( data ) 
  {
    $( "#responseText" ).val( data );
    eval(data);
  }
);

帖子正在返回:

$('.frame').html2canvas({
  onrendered: function (canvas) {
    //Set hidden field's value to image data (base-64 string)
    $('#img_val').val(canvas.toDataURL('image/png'));
    //Submit the form manually
    document.getElementById('myForm').submit();
  }
});

有什么想法吗?

谢谢!

更多信息:

按钮点击我正在调用此功能:

function saveCSS() {

    var id_data = $(".frame div img").map(function() {
      return $(this).attr("id");
    }).get();

    var title_data = $(".frame div img").map(function() {
      return $(this).attr("title");
    }).get();

    var width_data = $(".frame div img").map(function() {
      return $(this).css("width");
    }).get();

    var height_data = $(".frame div img").map(function() {
      return $(this).css("height");
    }).get();

    var top_data = $(".frame div:has(img)").map(function() {
      return $(this).css("top");
    }).get();

    var left_data = $(".frame div:has(img)").map(function() {
      return $(this).css("left");
    }).get();

    var zindex_data = $(".frame div:has(img)").map(function() {
      return $(this).css("z-index");
    }).get();


    var images_array = [];
       $.each(id_data, function (index, value) {
        images_array.push(value);
        images_array.push(title_data[index]);
        images_array.push(width_data[index]);
        images_array.push(height_data[index]);
        images_array.push(top_data[index]);
        images_array.push(left_data[index]);
        images_array.push(zindex_data[index]);
    });

    $.post("./save.php", 
      {
        'images_key' : images_array,
        'userid_key' : $('#userid').val(),
        'avatar_key' : $('#avatar_name').val()
      },
      function( data ) 
      {
        // $( "#responseText" ).val( data );
        // console.log(data);
        eval(data);
      }
    );
}

save.php文件包含:

.
.
.
echo "
$('.frame').html2canvas({
    onrendered: function (canvas) {
        $('#img_val').val(canvas.toDataURL('image/png'));
        document.getElementById('myForm').submit();
    }
});
";
.
.
.

console.log(data)按预期记录echo但是,在Chrome的控制台中,当我执行saveCSS()时,我看到了:

function( data ) 
      {
        // $( "#responseText" ).val( data );
        // console.log(data);
        eval(data);
**Uncaught SyntaxError: Unexpected Identifier**
      }
    );

我害怕我不明白为什么我会收到错误。

1 个答案:

答案 0 :(得分:0)

为了执行返回的数据,你必须评估它,例如

$.post("./save.php", 
  {
    'images_key' : images_array,
    'userid_key' : $('#userid').val(),
    'avatar_key' : $('#avatar_name').val()
  },
  function( data ) 
  {
    $( "#responseText" ).val( data );
    eval(data);
  }
);

除非您完全信任从服务器接收的代码,否则我建议不要执行数据,因为它可能会导致您网站中出现XSS vulnerability