0

我需要使用 jQuery 进行 ajax 调用,并且需要根据条件的结果传递不同的 ajax 选项if/else

这就是我尝试的方式:

var url = 'form_submission.php';
if (imgAttached) {
  var params     = $form.serializeArray(),
      formData   = new FormData(),
      files      = $form.find('[name="images"]')[0].files;

  $.each(files, function(i, file) {
    formData.append('images-' + i, file);
  });
  
  $.each(params, function(i, val) {
    formData.append(val.name, val.value);
  });

  var ajaxOptions  =  " url:"+url
      ajaxOptions +=  ",type:"+'post'
      ajaxOptions +=  ",data:"+formData
      ajaxOptions +=  ",cache:"+false
      ajaxOptions +=  ",contentType:"+false
      ajaxOptions +=  ",processData:"+false; 

} else {
  var formData = $form.serialize();

  var ajaxOptions  =  " url:"+url
      ajaxOptions +=  ",type:"+'post'
      ajaxOptions +=  ",data:"+formData;
} 

这就是我从外部调用 ajax 请求的方式if/else

$.ajax({        
  ajaxOptions,        
  beforeSend: function() {},
  success: function(json) {}
)}

我的问题是请求不适用ajaxOptions,当我尝试以标准方式工作时。谁能告诉这里会有什么问题?

4

1 回答 1

1

$.ajax()函数将对象作为参数,即它应该具有键值对

这里, in$.ajax({ ajaxOptions, .....})ajaxOptions一个由连接形成的字符串,而不是键值对

预期的

url: 'form_submission.php',
method: 'POST'

实际的

"url: 'form_submission.php', method: 'POST'"

要解决此问题,请创建一个对象并通过使用扩展运算符提取属性ajaxOptions将其传递给函数。$.ajax()

if (imgAttached) {
  .
  .
  .
  const ajaxOptions = {
    url: url,
    type: "POST",
    data: formData,
    cache: false,
    contentType: false,
    processData: false,
  };
} else {
  .
  .
  .
  const ajaxOptions = {
    url: url,
    type: "POST",
    data: formData,
  };
}

$.ajax({        
  ...ajaxOptions,        
  beforeSend: function() {},
  success: function(json) {}
)}
于 2021-05-24T10:54:12.903 回答