Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does jquery $.ajax remove line breaks in data and $.get doesn't?

I call the same PHP script using $.ajax and $.get and get two different results.

$.ajax strips line breaks from data passed through the function while $.get doesn't.

I've tried explicitly setting the dataType to text and html with no luck. Most of the parameters for $.get default to the same in $.ajax.

http://api.jquery.com/jQuery.ajax/

Is this a bug?

Here is the exact code I use:

    $.get("lib/ajax_scripts/set-product-value.php", { input_id: input_id, val:value });

    $.ajax({
            url:"lib/ajax_scripts/set-product-value.php",
            type:'GET',
            data:'input_id='+input_id+'&val='+value});

Below is code anyone can try who has access to PHP enabled server and firebug. Look at the firebug response for each request, you will see that <br /> are added to the $.get and not to $.ajax.

ajaxtest.html

<form method="GET" onsubmit="return false">
    <textarea id="data" name="data">a
        b
        c</textarea>
    <input type="submit" value="Submit" id="submit">        
</form>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">
$('#submit').click(function(){
   var data = $('#data').val();

   $.get("data.php", { data: data });


   $.ajax({
        url:"data.php",
        type:'GET',
        data:'data='+data});

});   
</script>

data.php

<?php  echo nl2br($_GET['data']); ?>
like image 626
payling Avatar asked Aug 10 '11 20:08

payling


2 Answers

$ Ajax returned text that were missing line breaks when I appended it to my html. Since I wanted to save the formatting, I had to put tags in it. So I used the string function replace like this:

var part1 = /\n/g;

var newc_data = old_data.replace(part1,"< br >") ;

This is probably a good reason to avoid text as a format. But in my case I want to write some intelligence to convert text to json.

like image 60
TGanoe Avatar answered Nov 14 '22 22:11

TGanoe


You should get the same results. According to the docs for jQuery.get:

This is a shorthand Ajax function, which is equivalent to:

$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

Moreover, if you look at the jQuery source code, you can clearly see that .get is just a wrapper for .ajax:

jQuery.each( [ "get", "post" ], function( i, method ) {
jQuery[ method ] = function( url, data, callback, type ) {
    // shift arguments if data argument was omitted
    if ( jQuery.isFunction( data ) ) {
        type = type || callback;
        callback = data;
        data = undefined;
    }

    return jQuery.ajax({
        type: method,
        url: url,
        data: data,
        success: callback,
        dataType: type
    });
};
});

Are you sure you aren't passing other parameters to jQuery.ajax? You might want to post the code you are using for each of them, to see if there is something else going on here.

like image 39
Justin Ethier Avatar answered Nov 14 '22 22:11

Justin Ethier