Почему jquery $ .ajax удаляет разрывы строк в данных, а $ .get - нет? - PullRequest
8 голосов
/ 11 августа 2011

Я вызываю один и тот же скрипт PHP, используя $ .ajax и $ .get, и получаю два разных результата.

$. Ajax удаляет разрывы строк из данных, передаваемых через функцию, а $ .get - нет.

Я попытался явно установить dataType в text и html, но безуспешно. Большинство параметров для $ .get по умолчанию совпадают с $ .ajax.

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

Это ошибка?

Вот точный код, который я использую:

    $.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});

Ниже приведен код, который может попробовать каждый, у кого есть доступ к серверу с поддержкой PHP и firebug. Посмотрите на ответ firebug для каждого запроса, вы увидите, что <br /> добавляются в $ .get, а не в $ .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']); ?>

Ответы [ 2 ]

2 голосов
/ 22 декабря 2011

$ Ajax вернул текст, в котором отсутствовали разрывы строк, когда я добавил его в свой HTML. Так как я хотел сохранить форматирование, мне пришлось поместить в него теги. Итак, я использовал строковую функцию replace следующим образом:

var part1 = / \ n / g;

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

Это, вероятно, веская причина избегать текста как формата. Но в моем случае я хочу написать некоторый интеллект для преобразования текста в json.

1 голос
/ 11 августа 2011

Вы должны получить те же результаты. Согласно документам для jQuery.get :

Это сокращенная Ajax-функция, которая эквивалентна:

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

Более того, если вы посмотрите на исходный код jQuery , вы ясно увидите, что .get - это просто оболочка для .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
    });
};
});

Вы уверены, что не передаете другие параметры jQuery.ajax? Возможно, вы захотите опубликовать код, который вы используете для каждого из них, чтобы увидеть, происходит ли здесь что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...