Ajax调用返回未定义的
我正在尝试进行API调用,并在Ajax不是函数的情况下出现以下错误:Ajax调用返回未定义的,ajax,api,reactjs,Ajax,Api,Reactjs,我正在尝试进行API调用,并在Ajax不是函数的情况下出现以下错误: import $ from 'jquery'; const apiCall = function () { var url = 'https://images.nasa.gov/#/search-results'; var request = { q: 'sun', media_type: 'image' }; var result = $.ajax({ url: url,
import $ from 'jquery';
const apiCall = function () {
var url = 'https://images.nasa.gov/#/search-results';
var request = {
q: 'sun',
media_type: 'image'
};
var result = $.ajax({
url: url,
dataType: 'json',
data: request,
type: 'GET'
})
.done(function() {
alert(JSON.stringify(result));
})
.fail(function() {
alert('failed');
})
}
module.exports = apiCall;
我在另一个模块中导入上述内容,并在react的render()函数中单击按钮调用它,如下所示:
import apiCall from './../api/apiCall';
class Gallery extends React.Component {
render () {
return (
<section id="gallery" className="g-site-container gallery">
<div className="grid grid--full">
<div className="gallery__intro">
<Button extraClass=""
type="button"
handleButtonClick={apiCall} />
</div>
</div>
</section>
)
}
}
module.exports = Gallery;
从“/../api/apiCall”导入apiCall;
类库扩展了React.Component{
渲染(){
返回(
)
}
}
module.exports=画廊;
有没有想到我做错了什么?根据我的经验,这类问题通常是因为您的传输没有像您预期的那样工作-或者您在传输代码的同时还使用了
jquery
(或任何其他库),将其包含在CDN链接中。如果是这种情况,下面的一些信息可能会帮助您解决问题:
首先,检查您的transpiler是否正在实际拉入jquery
。仅将其放在页面上并不一定允许此代码工作-因为当您的transpiler在以下位置运行时:
import $ from 'jquery'
它将首先从node\u modules
加载jquery
包,然后为它创建一个内部名称,例如$\u 1
,它将在包中使用。如果您打算通过CDN在页面上包含jquery
,而不是以这种方式捆绑,则需要在webpack
或rollup
配置中将其标记为external
。如果使用webpack
,它看起来像:
{
entry: '/path/to/your/application.js',
externals: {
'jquery': '$',
}
}
这本质上告诉webpack,“当我从'jquery'
导入时,不要查看节点\u模块
——而是假设jquery
已作为窗口存在于页面上。$
。现在,webpack
不会尝试包含和捆绑所有的jquery
lib,而是创建$\u 1
它实际上会尊重$
是什么
如果您确实打算将jquery
作为构建的一部分进行加载和绑定(不建议这样做,因为它会导致难以置信的大小膨胀)-我建议确保它安装在节点模块中。您可以通过以下方式执行此操作:
npm install -S jquery
或者,如果您使用的是纱线
:
yarn add jquery
现在,在传输时,您的import
语句应该正确加载库。根据我的经验,这种类型的问题最常见的原因是,您的传输没有按预期工作,或者您正在传输代码,同时还使用jquery
(或任何其他库),方法是将其包含在CDN链接中。如果是这种情况,下面的一些信息可能会帮助您解决问题:
首先,检查您的transpiler是否正在实际拉入jquery
。仅将其放在页面上并不一定允许此代码工作-因为当您的transpiler在以下位置运行时:
import $ from 'jquery'
它将首先从node\u modules
加载jquery
包,然后为它创建一个内部名称,例如$\u 1
,它将在包中使用。如果您打算通过CDN在页面上包含jquery
,而不是以这种方式捆绑,则需要在webpack
或rollup
配置中将其标记为external
。如果使用webpack
,它看起来像:
{
entry: '/path/to/your/application.js',
externals: {
'jquery': '$',
}
}
这本质上告诉webpack,“当我从'jquery'
导入时,不要查看节点\u模块
——而是假设jquery
已作为窗口存在于页面上。$
。现在,webpack
不会尝试包含和捆绑所有的jquery
lib,而是创建$\u 1
它实际上会尊重$
是什么
如果您确实打算将jquery
作为构建的一部分进行加载和绑定(不建议这样做,因为它会导致难以置信的大小膨胀)-我建议确保它安装在节点模块中。您可以通过以下方式执行此操作:
npm install -S jquery
或者,如果您使用的是纱线
:
yarn add jquery
现在,在传输时,import
语句应该正确加载库。首先,确保您没有使用,因为它排除了ajax
功能
顺便说一句,不建议同时使用exports.module
和ES6的import/export
。试着只使用其中一个。不太确定,但它可能会导致一些难以理解的模块
问题
此外,根据官方文档,您必须在回调中处理数据
$.ajax({
url: url,
dataType: 'json',
data: request,
type: 'GET'
})
.done(function(data) {
// Process data provided from callback function
alert(data);
})
.fail(function() {
alert('failed');
})
就我个人而言,我更喜欢在React
应用程序中调用ajax。首先,确保您没有使用ajax,因为它排除了ajax
功能
顺便说一句,不建议同时使用exports.module
和ES6的import/export
。试着只使用其中一个。不太确定,但它可能会导致一些难以理解的模块
问题
此外,根据官方文档,您必须在回调中处理数据
$.ajax({
url: url,
dataType: 'json',
data: request,
type: 'GET'
})
.done(function(data) {
// Process data provided from callback function
alert(data);
})
.fail(function() {
alert('failed');
})
就我个人而言,我更喜欢在React
应用程序中调用ajax。有什么错误?如果您不告诉我们它是什么,就无法解决问题。Hi@gravityplanx,在第一行告诉您,我得到了\u jquery2.default.ajax不是一个函数,并且未从控制台.log($.ajax)
中定义。尝试在$(文档)中使用$.ajax。就绪(函数(){
?@SrikanthJeeva,我试过了,但不幸的是没有运气。我得到了同样的错误。有人在这里报告了类似的错误。你试过了吗?错误是什么?如果你不告诉我们它是什么,就无法解决问题。嗨@gravityplanx,在第一行告诉你,我得到了\u jquery2.default.ajax不是一个函数
从console.log($.ajax)
尝试在$(文档)中使用$.ajax.ready(function(){
?@SrikanthJeeva,我已经尝试过了,但不幸的是没有运气。我遇到了相同的错误。有人报告了一个s