2

I'm trying to dynamically create a div to show error messages using jquery. I'm able to use append() to create the HTML easily enough, but I need to call a php variable in order to display the content. If I just try adding php opening and closing tags like I would ordinarily, the append method doesn't behave as expected and outputs a seemingly random section from the middle of the line. How can I overcome this problem?

Here's the jquery code as I have it:

$(document).ready(function() {
    var errors_php = "<?php  echo validation_errors('<li>','</li>'); ?>";
    $('#wrapper').append("<div id='errors'><ul>"+errors_php+"</ul></div>");
    $('#errors').slideDown('slow');
});

Note: the validation_errors() function is a codeigniter method. Incidentally, if I remove the errors_php variable from the append() it works as expected, displaying an empty div.

EDIT:

The generated code is:

<div id="errors"><ul>',''); ?&gt;</ul></div>
7
  • 1
    And what is being output to the screen? Commented Jul 8, 2010 at 17:04
  • sorry @wowo_999 I don't follow. The browser is parsing the generated code above and displaying it as expected (with a little css!). Commented Jul 8, 2010 at 17:07
  • Related: stackoverflow.com/questions/168214/… Commented Jul 8, 2010 at 17:09
  • @John Rasch I just looked up that question and it is exactly what I'm trying to do. Unfortunately, I don't understand from the answers how they've solved it. I've never used json data before. Where should I put that piece of code?!?! Commented Jul 8, 2010 at 17:22
  • What does the line var errors_php = "<?php echo validation_errors('<li>','</li>'); ?>"; render as when the page is loaded? I mean, if you go into View Source and look at that line, what do you see? Commented Jul 9, 2010 at 5:42

3 Answers 3

3

As per your comment:

I just looked up that question and it is exactly what I'm trying to do. Unfortunately, I don't understand from the answers how they've solved it. I've never used json data before. Where should I put that piece of code?

JSON data is simply JavaScript Object Notation, so if you set a JavaScript a variable to a JSON value it will essentially recreate a copy of the object that was serialized into JSON in the first place.

var errors_php = "<?php  echo validation_errors('<li>','</li>'); ?>";

should be:

var errors_php = <?php echo json_encode(validation_errors('<li>','</li>')); ?>;
Sign up to request clarification or add additional context in comments.

Comments

3

Make sure that the output from the PHP is properly escaped. If you have a quotation mark (") in the error code it will cause problems. Try wrapping validation_errors with addslashes:

$(document).ready(function() {
    var errors_php = "<?php echo addslashes(validation_errors('<li>','</li>')); ?>";
    $('#wrapper').append("<div id='errors'><ul>"+errors_php+"</ul></div>");
    $('#errors').slideDown('slow');
});

4 Comments

I like your thinking, but I just tried it and got the same output. There shouldn't be any quotation marks or anything like that in the errors.
Can you post the code for validation_errors and what some example errors might be?
validation_errors() is a function that is part of the codeigniter framework. It outputs predefined error messages following form submission eg. required field is empty etc. The problem isn't in this function, it's working out how to get jquery to send the browser php.
Outside of the javascript function, run the following: <?php print_r(validation_errors('<li>','</li>')); ?> What does it print out?
0

You can't run PHP code in javascript file, but you can run html&JS code in PHP file.

Javascript runs in the user's browser.

PHP runs on the server. It reads your .php files, runs PHP that it finds, sends HTML to the browser, and exits.

There is no "spooky action at a distance" that allows you to run PHP code from within the Javascript code.

To run html&JS code in PHP file, do something like below:

$('.addctr').append(
'<div class="row">' +
'<div class="form-group col-sm-5">' +
'<label class="control-label">Parameter</label>' +
'<select class="form-control" name="asset_search">' +
'<?php foreach ($dd["asset_search"] as $asset_search) { ?>' +
'<option <?= set_select("asset_search", $asset_search["text"]) ?>><?= $asset_search["value"] ?></option>' +
'<?php } ?>' +
'</select>');

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.