2

TIP: "you could simple send an json object / array from php to js, and execute every entry like "update_match('1');" using the eval() function, please stop sending js code that way"- Lucian Depold.


In the index.php, I have this code, which executes when the document is ready:

$.post('php/main.php', {elements: 1}, function(return_msg) {
    alert(return_msg);
});

The respond I get is a bunch of scripts, as expected, with the expected values. However, they do not execute! How to make them execute?

Here is the response:

<script>jsfunction(37069);</script><script>updateTextbox('');</script><script>update_match('1', '19.30 Friday 15/5', '1');</script><script>update_player('1', '1', 'recoba', 'cmf', 'teo', '0', '0');</script><script>update_player('1', '2', 'nesta', 'cb', 'tsoulou', '0', '0');</script><script>update_player('1', '3', 'raul', 'cf', 'striker', '0', '0');</script><script>update_player('1', '4', 'samuel', 'cb', 'mafia', '', '1');</script><script>update_player('1', '5', 'deisler', 'cmf', 'free_kick', '1', '');</script><script>update_player('1', '6', 'ferdinard', 'cb', 'strong', '1', '');</script><script>update_match('2', 'Match 2', '0');</script>

When I had the PHP code that produced these scripts in the bottom of the index.php, all the js functions where called correctly. Because of this question though, I had to move the code to another .php file.

Community
  • 1
  • 1
gsamaras
  • 71,951
  • 46
  • 188
  • 305

3 Answers3

2

Do it this way:

In PHP...

$arrayOfCalls = array();
$arrayOfCalls[]="update_match('1')";
$arrayOfCalls[]="update_match('2')";

$dummy = array();
$dummy['calls'] =$arrayOfCalls;
echo json_encode($dummy);

And in Javascript...

$.post('php/main.php', {elements: 1}, function(return_json) {
    return_json = JSON.parse(return_json);
    return_json.calls.forEach(function(code){
    eval(code);
    })
});
Lucian Depold
  • 1,999
  • 2
  • 14
  • 25
1

You can append the result to your page :

$.post('php/main.php', {elements: 1}, function(return_msg) {
    $('body').append(return_msg);
});

The code will be executed but I'm not sure if it's safe to do that.

Lauromine
  • 1,453
  • 9
  • 19
1

The date delivered by the AJAX call is just data - or text. In order to interpret that as JavaScript, you must append it to the dom.

Two ways: first, by appending the data directly:

$.post('php/main.php', {elements: 1}, function(return_msg) {
    alert(return_msg);
    $('body').append(return_msg);
});

but there's also a shorthand method:

$.getScript('php/main.php?elements=' + 1, function () {
   // script loaded

});

Please read the docs, there are some caveats!

Axel Amthor
  • 10,980
  • 1
  • 25
  • 44