2010-07-27 4 views
0

У меня проблема с запутанностью. У меня есть PHP-скрипт, который опробовает другой скрипт PHP через Prototype. Теперь, когда я просматриваю эту страницу, когда все нормально, и все это хорошо реагирует, но когда я второй раз опроса, он возвращает нечетный ответ.Прототип AJAX собирает неправильный ответ от PHP

Что у меня есть кусок текста:

blah £ £ 

Теперь, когда это проходит через Prototype первый раз вокруг он кодирует строку правильно с помощью функции побега. Полный код отображается здесь (переменная escape_function является id_opt [ «escape_function»]):

escape_function:  escape, // or encodeURIComponent 

var new_text = id_opt['escape_function']($F(id + '_edit')); 
var params = 'id=' + id + '&content=' + new_text; 
if(id_opt['type'] == 'select') { 
    params += '&option_name=' + $(id + '_option_' + new_text).innerHTML; 
} 

var ajax_req = new Ajax.Request(
    id_opt['save_url'], 
    { 
     method: 'post', 
     postBody: params, 
     onSuccess: function(t) { alert(t.responseText); EditInPlace._saveComplete(id, t); }, 
     onFailure: function(t) { EditInPlace._saveFailed(id, t); } 
    } 
); 

по опросу страница PHP сохраняет информацию (фрагмент текста) к БД и reponds с текстом. Затем Prototype устанавливает содержимое div в возвращаемый текст.

Когда я иду, чтобы отправить его снова, все будет в порядке до предупреждения (t.responseText); когда прототип показывает некоторые неокрашенные символы вместо £. Самое странное в том, что информация в поле базы данных по-прежнему остается бла-бэ (что правильно), но прототип отвечает blah (?) (?) (Символы (?) - это разграниченные символьные разделители).

Я пришел к выводу, что PHP дает правильную информацию, но по какой-то причине прототип подбирает неправильную информацию ... но нет ничего, что могло бы сделать это между двумя, которые меня действительно запутали. Будучи новичком на прототипе, я не настолько разбираюсь в этом.

Спасибо за любую помощь,

ответ

0

Я решил переписать сценарий в JQuery, и он работал отлично. Я приблизился к тому, чтобы заставить его работать в Prototype, используя типы кодирования, но он добавил бы акцент перед каждым значком фунта, который был недостаточно хорош.

Так что теперь я переписал его, все работает отлично без клика.

0

Я хотел бы использовать такой инструмент, как FireBug или Charles оценить трафик, поступающий от вашего PHP скрипт (если вы уже сделали это). Если все в порядке, проверьте внутри кода клиента, используя операторы alert(), чтобы увидеть, когда происходит неправильный перевод, чтобы подтвердить подозрения в прототипе.

+0

Я сделал все эти предупреждения (t.responseText); в ответе ajax, который вы видите в коде exmaple, где он запутывается, вывод php отлично проверяется вводом базы данных. Если я использую htmlspecialchars на стороне сервера, я могу получить £, чтобы показать, что текст и прототип не будут беспорядочны с ним, но как только я использую текст, нормальный прототип любит его менять – Sammaye

+0

, если я использую encodeURIComponent вместо того, чтобы убежать от него. Но на стороне php он ставит переднюю часть £ – Sammaye

+0

. Еще страннее, поскольку, если я не использую и не декодирую, или что-то еще, то во втором опросе прототипа страницы php изменит символ unkown на строку unicode как:% uFFFD, которая запутывает как Что ж – Sammaye