Вызов веб-сервиса .NET с JQuery вызывает горе при попытке отправить данные

Первое решение (правка: альтернатива)

render() {
    const statement = true;
    const stuff = this.buildStuff(statement, 3); // jsx result looped in divs
    return (
      <div>
        {
          statement &&
          <div>
            { stuff }
          </div>
        }
      </div>
    );
  }

Альтернатива, запоминание (кэширование функций), если это ваша цель:

const memoize = require('fast-memoize');
const memoized = memoize(this.buildStuff);


...

render() {
    const statement = true; 
    return (
      <div>
        {
          statement &&
          <div>
            <p>
              {memoized()}
            </p>
            <p>
              {memoized()}
            </p>
            <p>
              {memoized()}
            </p>
          </div>
        }
      </div>
    );
  }

Истинная сила запоминания, однако, если вы кешируете на основе параметра, который вы даете buildStuff (может быть, вы переместите оператор в buildstuff?). В вашем случае я бы просто очистил компонент и параметры для удобства чтения, а не для оптимизации чего-либо. Итак, последний вариант:

// Stuff is a component now
const Stuff = ({statement, stuff}) => {
  if(!statement)
    return null;

  const result = stuff();

  return (
    <div>   
      <p>
        {result}
      </p>
      <p>
        {result}
      </p>
      <p>
        {result}
      </p>
    </div>
  )
}

render() {
    return (
      <div>
        <Stuff statement={true} stuff={this.buildStuff} />
      </div>
    );
  }

Теперь вы можете выбирать, передавать ли результат или саму функцию через подпорки, а в нисходящем компоненте либо вызывать функцию, либо просто передавать ее результаты. [117 ]

Единственный ответ на ваш вопрос в заголовке: вы не можете, JSX не шаблонизатор, как Razor.

Объяснение:

// JSX  
<div id="foo">Hello world</div>

// Translates into 
React.createElement("div", {id: "foo"}, "Hello world");

// JSX
<div>{ statement && <div /> }</div>

// Translates to
React.createElement("div", null, statement && React.createElement("div"));

Либо вы объявляете новую переменную с атрибутом, либо вы просто не можете, поскольку javascript не позволяет создавать переменные внутри параметров функций.

9
задан nialljsmith 29 January 2009 в 20:16
поделиться

3 ответа

Я думаю, что веб-сервис ожидает параметр json быть установленным. Попробуйте этот вызов Ajax:

var data = {'name':'niall'};

$.ajax({
    type: "POST",
    url: "/WebServices/BasketServices.asmx/AddItemToBasket",
    data: "json=" + JSON.stringify(data),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: OnItemAddedSuccess
});

где JSON.stringify() метод как тот, найденный в "официальной" реализации: http://json.org/js.html

12
ответ дан 4 December 2019 в 11:08
поделиться

Это должно работать. Необходимо передать json как строку с названием параметра 'json' (который совпадает с названием параметра в веб-методе.

data: "{json: '{\'name\':\'niall\'}'}",

2
ответ дан 4 December 2019 в 11:08
поделиться

Это всегда происходит со мной, когда я не переношу строковые данные с двойными кавычками

0
ответ дан 4 December 2019 в 11:08
поделиться
Другие вопросы по тегам:

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