Вы ToList ()?

У вас должен быть скрипт на стороне сервера для обработки вашего запроса, это невозможно сделать с помощью javascript.

Отправлять необработанные данные без URI-кодирования или экранировать специальные символы в php и сохранять их как новые txt, вы можете отправить запрос ajax с помощью метода post и FormData, например:

JS:

var data = new FormData();
data.append("data" , "the_text_you_want_to_save");
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new activeXObject("Microsoft.XMLHTTP");
xhr.open( 'post', '/path/to/php', true );
xhr.send(data);

PHP:

if(!empty($_POST['data'])){
$data = $_POST['data'];
$fname = mktime() . ".txt";//generates random name

$file = fopen("upload/" .$fname, 'w');//creates new file
fwrite($file, $data);
fclose($file);
}

Edit:

Как упоминал Флориан, резерв XHR не требуется, поскольку FormData не поддерживается в старых браузерах ( formdata browser compatibiltiy ), поэтому вы можете объявить переменную XHR как:

var xhr = new XMLHttpRequest();

Также обратите внимание, что это работает только для браузеров, поддерживающих FormData, таких как IE +10.

25
задан Richard Everett 2 December 2008 в 16:26
поделиться

5 ответов

ToList всегда сразу оценивает последовательность - не только в LINQ к SQL. Если Вы хотите это, это прекрасно - но это является не всегда соответствующим.

Лично я постарался бы не объявлять, что Вы возвращаетесь List<T> непосредственно - обычно IList<T>, является более соответствующим, и позволяет Вам изменяться на различную реализацию позже. Конечно, существуют некоторые операции, которые только определяются на List<T> самостоятельно..., этот вид решения всегда хитер.

РЕДАКТИРОВАНИЕ: (Я поместил бы это в комментарий, но это будет слишком большим.) Задержанное выполнение позволяет Вам иметь дело с источниками данных, которые являются слишком большими для умещений в памяти. Например, при обработке файлов журнала - преобразование их от одного формата до другого, загружая их в базу данных, разрабатывая некоторую статистику или что-то как этот - можно быть в состоянии обработать произвольные объемы данных путем потоковой передачи его, но Вы действительно не делаете , хотят высосать все в память. Это не может быть беспокойством о Вашем конкретном приложении, но это - что-то для мысли.

23
ответ дан Jon Skeet 15 October 2019 в 16:01
поделиться

У нас есть тот же сценарий - связь WCF к серверу, сервер использует LINQtoSQL.

Мы используем.ToArray () при запросе объектов с сервера, потому что это "недопустимо" для клиента для изменения списка. (Значение, нет никакой цели поддерживать ".Add", ".Remove", и т.д.).

, В то время как все еще на сервере, однако, я рекомендовал бы оставить его, поскольку это - значение по умолчанию (который не является IEnumerable, а скорее IQueryable). Таким образом, если Вы хотите отфильтровать еще больше на основе некоторых критериев, фильтрация, ВСЕ ЕЩЕ на стороне SQL, пока не оценено.

Это - очень важный момент, поскольку это означает невероятное увеличение производительности или потери в зависимости от того, что Вы делаете.

ПРИМЕР:

// This is just an example... imagine this is on the server only. It's the
// basic method that gets the list of clients.
private IEnumerable<Client> GetClients()
{
    var result = MyDataContext.Clients;  

    return result.AsEnumerable();
}

// This method here is actually called by the user...
public Client[] GetClientsForLoggedInUser()
{
    var clients = GetClients().Where(client=> client.Owner == currentUser);

    return clients.ToArray();
}

Вы видите то, что происходит там? Метод "GetClients" собирается вызвать загрузку ВСЕХ 'клиентов' от базы данных... ТОГДА оператор Where, окажется, в методе GetClientsForLoogedInUser отфильтрует его.

Теперь, заметьте небольшое изменение:

private IQueryable<Client> GetClients()
{
    var result = MyDataContext.Clients;  

    return result.AsQueryable();
}

Теперь, фактической оценки не произойдет, пока ".ToArray" не называют..., и SQL сделает фильтрацию. НАМНОГО лучше!

16
ответ дан Timothy Khouri 15 October 2019 в 16:01
поделиться

В случае Linq к объектам, возвращаясь List<T> от функции не так хорошо как возврат IList<T>, как указывает ПОЧТЕННАЯ СТРЕЛЬБА ПО ТАРЕЛОЧКАМ. Но часто можно все еще добиться большего успеха, чем это. Если вещь, которую Вы возвращаете, должна быть неизменной, IList является плохим выбором, потому что это приглашает вызывающую сторону добавлять или удалять вещи.

, Например, иногда у Вас есть метод или свойство, которое возвращает результат запроса Linq или использует yield return для ленивой генерации списка, и затем Вы понимаете, что было бы лучше сделать это в первый раз, когда Вас звонят, кэшируете результат в List<T> и возвращаете кэшированную версию после этого. Именно тогда возврат IList может быть плохой идеей, потому что вызывающая сторона может изменить список в их собственных целях, которые тогда повредят Ваш кэш, делая их изменения видимыми во все другие вызывающие стороны.

Лучше для возврата IEnumerable<T>, таким образом, все они имеют, вперед повторение. И если вызывающая сторона хочет быстрый произвольный доступ, т.е. им жаль, что они не могли бы использовать [] для доступа индексом, они могут использовать ElementAt, который определяет Linq так, чтобы это бесшумно осуществило сниффинг для IList и использование, что при наличии, и если не это делает немой линейный поиск.

Одна вещь я использовал ToList для, когда у меня есть сложная система выражений Linq, смешанных с пользовательскими операторами, которые используют yield return, чтобы отфильтровать или преобразовать списки. Продвижение через в отладчик может стать могущественным сбивающий с толку, когда это переходит вокруг выполнения отложенных вычислений, таким образом, я иногда временно добавляю ToList () к нескольким местам так, чтобы я мог более легко следовать за путем выполнения. (Хотя, если вещи Вы выполняетесь, имеют побочные эффекты, это может изменить значение программы.)

7
ответ дан Daniel Earwicker 15 October 2019 в 16:01
поделиться

Это зависит, если необходимо изменить набор. Мне нравится использовать Массив, когда я знаю, что никто не собирается добавить/удалить объекты. Я использую список, когда я должен отсортировать/добавить/удалить объекты. Но, обычно я просто оставляю его как IEnumerable, пока я могу.

2
ответ дан joegtp 15 October 2019 в 16:01
поделиться

Если Вам не нужны дополнительные функции List<>, почему не просто придерживаются IQueryable<>?!?!?! Наименьший общий знаменатель является лучшим решением (особенно, когда Вы видите ответ Timothy).

2
ответ дан TheSoftwareJedi 15 October 2019 в 16:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: